6

Mam aplikację na iPada, którą próbuję umożliwić użytkownikom, aby wybrać zdjęcia z ich PhotoLibrary, w pobliżu, ponieważ mogę powiedzieć, że muszę użyć UIImagePickerController w UIPopOverController. Próbowałem tego dokonać na wiele różnych sposobów, ale mogę uzyskać wszystko, aby zadziałać. Widziałem wiele fragmentów kodu, ale nie mogę sprawić, by działały pod Monotouch.Monotouch - UIImagePickerController z aplikacją iPad

Czy ktoś może wskazać mi właściwy sposób, aby to zrobić? Bardzo to doceniam.

Odpowiedz

2

Oto kod, którego użyłem w aplikacji - powinien to być dobry początek, aby to zadziałało.

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

musiałem zadzwonić kod, który tworzy selektor obrazu i kod, który reaguje na obrazie są zabierani z głównego wątku, aby zmusić go do pracy:

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