6

Ho un'applicazione per iPad che sto cercando di consentire agli utenti di selezionare le immagini dal loro PhotoLibrary, quasi come posso dire di dover usare UIImagePickerController in un UIPopOverController. Ho provato diversi modi per farlo, ma riesco a far funzionare qualsiasi cosa. Ho visto molti frammenti di codice ma non riesco a farli funzionare sotto Monotouch.Monotouch - UIImagePickerController con app per iPad

Qualcuno potrebbe indicarmi il modo corretto di farlo? Lo apprezzo molto.

risposta

2

Ecco il codice che ho utilizzato in un'app: questo dovrebbe essere un buon inizio per farlo funzionare.

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

ho dovuto chiamare il codice che crea il selettore delle immagini e il codice che reagisce all'immagine essere scelto dal thread principale per farlo funzionare:

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