Monotouch - 带有 iPad 应用程序的 UIImagePickerController

发布于 2024-11-06 10:16:16 字数 281 浏览 8 评论 0原文

我有一个仅限 iPad 的应用程序,我试图允许用户从他们的 PhotoLibrary 中选择图像,据我所知,我必须在 UIImagePickerController 中使用 UIImagePickerController >UIPopOverController。我尝试了很多不同的方法来做到这一点,但我可以让任何事情发挥作用。我看过很多代码片段,但我似乎无法让它们在 Monotouch 下工作。

有人能指出我执行此操作的正确方法吗?我非常感激。

I have an iPad only application that I'm trying to allow users to select images from their PhotoLibrary, near as I can tell I have to use the UIImagePickerController in a UIPopOverController. I have attempted many different ways to do this but I can get anything to work. I've seen a lot of code snippets but I can't seem to get them working under Monotouch.

Could somebody point me at the correct way to do this? I greatly appreciate it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖乖兔^ω^ 2024-11-13 10:16:16

我必须调用创建图像选择器的代码以及对从主线程中选取的图像做出反应的代码才能使其正常工作:

    partial void OnImport (UIButton s)
    {
        BeginInvokeOnMainThread(delegate
        {

            UIImagePickerController picker = new UIImagePickerController();
            picker.ContentSizeForViewInPopover = new System.Drawing.SizeF(320,480);

            UIPopoverController popover = new UIPopoverController(picker);

            picker.FinishedPickingImage += delegate(object sender, UIImagePickerImagePickedEventArgs e) 
            {       
                BeginInvokeOnMainThread(delegate
                {
                    UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
                    picker.DismissModalViewControllerAnimated(true);
                    // do something with image
                });

            };

            picker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;     
            popover.PresentFromRect(s.Frame, this.View, UIPopoverArrowDirection.Left, true);                    
        });
    }

I had to call the code that creates the image picker and the code that reacts to the image being picked from the main thread to get it to work:

    partial void OnImport (UIButton s)
    {
        BeginInvokeOnMainThread(delegate
        {

            UIImagePickerController picker = new UIImagePickerController();
            picker.ContentSizeForViewInPopover = new System.Drawing.SizeF(320,480);

            UIPopoverController popover = new UIPopoverController(picker);

            picker.FinishedPickingImage += delegate(object sender, UIImagePickerImagePickedEventArgs e) 
            {       
                BeginInvokeOnMainThread(delegate
                {
                    UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
                    picker.DismissModalViewControllerAnimated(true);
                    // do something with image
                });

            };

            picker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;     
            popover.PresentFromRect(s.Frame, this.View, UIPopoverArrowDirection.Left, true);                    
        });
    }
蘸点软妹酱 2024-11-13 10:16:16

这是我在应用程序中使用的代码 - 这应该作为您使其正常工作的良好开端。

UIImagePickerController imagePicker;
UIPopoverController popOver;

void AttachImageBtnTouched(object sender, EventArgs e)
{
    if (popOver == null || popOver.ContentViewController == null)
    {
        imagePicker = new UIImagePickerController();
        popOver = new UIPopoverController(imagePicker);
        ImagePickerDelegate imgDel = new ImagePickerDelegate();
        imagePicker.Delegate = imgDel;
        imagePicker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
    }
    if (popOver.PopoverVisible)
    {
        popOver.Dismiss(true);
        imagePicker.Dispose();
        popOver.Dispose();
        return;
    }
    else
    {
        popOver.PresentFromRect(btnAttachment.Frame, this.View, UIPopoverArrowDirection.Any, true);
    }
}

// The Delegate class looks something like

public class ImagePickerDelegate : UIImagePickerControllerDelegate
{
    public ImagePickerDelegate()
    {}

    public override void FinishedPickingMedia(UIImagePickerController picker, NSDictionary info)
    {
        UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
        // do whatever else you'd like to with the image
    }
}

Here is code that I've used in an app - this should serve as a good start for you to get it working.

UIImagePickerController imagePicker;
UIPopoverController popOver;

void AttachImageBtnTouched(object sender, EventArgs e)
{
    if (popOver == null || popOver.ContentViewController == null)
    {
        imagePicker = new UIImagePickerController();
        popOver = new UIPopoverController(imagePicker);
        ImagePickerDelegate imgDel = new ImagePickerDelegate();
        imagePicker.Delegate = imgDel;
        imagePicker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
    }
    if (popOver.PopoverVisible)
    {
        popOver.Dismiss(true);
        imagePicker.Dispose();
        popOver.Dispose();
        return;
    }
    else
    {
        popOver.PresentFromRect(btnAttachment.Frame, this.View, UIPopoverArrowDirection.Any, true);
    }
}

// The Delegate class looks something like

public class ImagePickerDelegate : UIImagePickerControllerDelegate
{
    public ImagePickerDelegate()
    {}

    public override void FinishedPickingMedia(UIImagePickerController picker, NSDictionary info)
    {
        UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
        // do whatever else you'd like to with the image
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文