Создание служебного метода, который генерирует всплывающее окно UIImagePickerController и возвращает выбранное UIImage - PullRequest
0 голосов
/ 10 марта 2012

Что я хочу сделать, это создать всплывающее окно с UIImagePickerController. Это легко, но я хочу создать служебный метод, который генерирует всплывающее окно UIImagePickerController и возвращает UIImage, как только пользователь выберет его. Проблема заключается в том, что UIImagePickerController имеет свойство делегата, которое используется для асинхронного завершения. Я думал, что, возможно, я мог бы передать делегата в свою служебную функцию, которая содержит код для выполнения после выбора изображения, но код для выполнения должен работать с выбранным изображением. Это код, который у меня есть до сих пор, и просто, чтобы все знали, он падает. Я верю, что это потому, что я выполняю это статическим методом.

  namespace GalleryProto
{
    static public class CameraUtility
    {       
        public static void GetImageFromGalleryWithPopup(UIViewController parentViewController, PointF centerPoint)
        {
            UIImagePickerController imagePicker;
            UIPopoverController popOver;

            imagePicker = new UIImagePickerController ();
            popOver = new UIPopoverController (imagePicker);

            popOver.DidDismiss += (popOverController, e) => 
            {
                if (popOver != null && popOver.PopoverVisible) {
                    Console.WriteLine ("Popover Dismissed.");
                    popOver.Dismiss (true);
                    imagePicker.Dispose ();
                    popOver.Dispose ();
                    imagePicker = null;
                    popOver = null;
                } 
            };

            Console.WriteLine ("Before Finished Picking Image Delegate.");
            imagePicker.Delegate = new MyPickerDelegate (imagePicker, popOver);
            imagePicker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
            imagePicker.AllowsEditing = false;              
            imagePicker.MediaTypes = new string[] {"public.image"};


            RectangleF popRectangle = new RectangleF (centerPoint, new SizeF (1, 1));
            popOver.PresentFromRect (popRectangle, parentViewController.View, 0, true); //Center the popup on the Image Content View.
        }

        public class MyPickerDelegate : UIImagePickerControllerDelegate
        {
            UIImagePickerController _imagePicker;
            UIPopoverController _popOver;

            public MyPickerDelegate(UIImagePickerController imagePicker, UIPopoverController popOver)
            {
                _imagePicker = imagePicker;
                _popOver = popOver;             
            }

            public override void Canceled (UIImagePickerController picker)
            {
                Console.WriteLine("Canceleled");
            }

            public override void FinishedPickingImage (UIImagePickerController picker, UIImage image, NSDictionary editingInfo)
            {
                Console.WriteLine("Finished Picking Image");

                _popOver.Dismiss (true);
                _imagePicker.Dispose ();
                _popOver.Dispose ();
                _imagePicker = null;
                _popOver = null;                
            }           
        }       
    }   
}

1 Ответ

0 голосов
/ 13 марта 2012

Я решил свою проблему, передав делегата для обратного вызова, который принимает UIImage в качестве аргумента, чтобы можно было соответствующим образом манипулировать изображением после его выбора.

...