Monotouch — UIImagePickerController с приложением для iPad

#ipad #xamarin.ios #uiimagepickercontroller #uipopovercontroller

#iPad #xamarin.ios #uiimagepickercontroller #uipopovercontroller

Вопрос:

У меня есть приложение только для iPad, которое я пытаюсь разрешить пользователям выбирать изображения из своих PhotoLibrary , насколько я могу судить, я должен использовать UIImagePickerController в UIPopOverController . Я пробовал много разных способов сделать это, но я могу заставить работать все, что угодно. Я видел много фрагментов кода, но, похоже, не могу заставить их работать в Monotouch.

Может ли кто-нибудь указать мне на правильный способ сделать это? Я очень ценю это.

Ответ №1:

Мне пришлось вызвать код, который создает средство выбора изображений, и код, который реагирует на изображение, выбранное из основного потока, чтобы заставить его работать:

     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);                    
        });
    }
  

Ответ №2:

Вот код, который я использовал в приложении — это должно послужить хорошим началом для вас, чтобы заставить его работать.

 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
    }
}