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