application tried to PResent modally an active controller <UIImagePickerController: 0x7b6ff400>
//圓角頭像 _avatarView = new UIImageView(new RectangleF(_blockSpace, _blockSpace, 2 * _avatarRadius, 2 * _avatarRadius));UIImage img = UIImage.FromFile("profile-pic.jpg");_avatarView.Layer.Contents = img.CGImage;_avatarView.Layer.MasksToBounds = true;//如果沒有將MasksToBounds設置為true,圖片圓角無效_avatarView.Layer.CornerRadius = _avatarRadius; _avatarView.UserInteractionEnabled = true;//用戶互動屬性()_avatarView.AddGestureRecognizer(new UITapGestureRecognizer(onClickImage));
void onClickImage() { try { //UIActionSheet是在iOS彈出的選擇按鈕項的對話框,可以添加多項,并為每項添加點擊事件。 //ChangePictureActionSheetDelegate:通過重寫UIActionSheetDelegate的Clicked方法,獲取當前點擊項 UIActionSheet _actionSheet = new UIActionSheet("選擇圖片", new ChangePictureActionSheetDelegate(this,_avatarView), "取消", null, "從相片庫", "拍照"); _actionSheet.ShowInView(this.View); } catch (Exception e) { Console.WriteLine("Error:" + e.Message); } }
UIActionSheet是在iOS彈出的選擇按鈕項的對話框,可以添加多項,并為每項添加點擊事件。
關鍵類:UIActionSheetDelegate。通過重寫UIActionSheetDelegate的Clicked方法,獲取UIActionSheet當前點擊項
class ChangePictureActionSheetDelegate : UIActionSheetDelegate { UIViewController _controller; UIImageView _img; UIImagePickerController picker; public ChangePictureActionSheetDelegate(UIViewController controller,UIImageView img) { _controller = controller; _img = img; } public override void Clicked(UIActionSheet actionSheet, int buttonIndex) { Console.WriteLine("你選擇了:" + buttonIndex); switch (buttonIndex) { case 1: CallPhoto(UIImagePickerControllerSourceType.Camera); break; case 0: CallPhoto(UIImagePickerControllerSourceType.PhotoLibrary); break; default: break; } } private void CallPhoto(UIImagePickerControllerSourceType type) { Console.WriteLine("Begin..."); if (UIImagePickerController.IsSourceTypeAvailable(type)) { try { picker = new UIImagePickerController(); picker.SourceType = type; //允許編輯圖片 picker.AllowsEditing = true; if (_controller.PresentedViewController == null) { _controller.PresentModalViewController(picker, false); } //picker.FinishedPickingImage += picker_FinishedPickingImage;(無效) //AvatarPickerDelegate:通過重寫UIImagePickerControllerDelegate的FinishedPickingImage方法獲取選擇的圖片 picker.Delegate =new AvatarPickerDelegate(_img); Console.WriteLine("Finished"); } catch (Exception e) { Console.WriteLine("Error:" + e.Message); } } else { Console.WriteLine("該設備不支持此操作"); } } }
關鍵類:UIImagePickerControllerDelegate。通過重寫UIImagePickerControllerDelegate的FinishedPickingImage方法獲取選擇的圖片
class AvatarPickerDelegate:UIImagePickerControllerDelegate { UIImageView _avatar; public AvatarPickerDelegate(UIImageView _imgView) { _avatar = _imgView; } public override void FinishedPickingImage(UIImagePickerController picker, UIImage image, NSDictionary editingInfo) { Console.WriteLine("選擇了圖片"); if (image == null) { Console.WriteLine("Null"); } //更新顯示圖片 _avatar.Layer.Contents = image.CGImage; //關閉UIImagePicker picker.DismissModalViewControllerAnimated(true); Console.WriteLine("完成選擇"); } }
新聞熱點
疑難解答