Application tried to present modally an active controller <UIImagePickerController: 0x7b6ff400>

1,AddGestureRecognizer为图片视图添加事件

 //圆角头像
_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弹出的选择按钮项的对话框,可以添加多项,并为每项添加点击事件。

2,获取UIActionSheet选择项

关键类: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("该设备不支持此操作");
}
} }

3,获取选择的图片

关键类: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("完成选择"); }
}

  



最新文章

  1. aischool 倒计时VIEW封装
  2. 剑指架构师系列-tomcat6通过IO复用实现connector
  3. Android自定义控件步骤总结
  4. iOS中保证线程安全的几种方式与性能对比
  5. Tran 与 Goto try catch raiserror等浅显应用
  6. 【动态规划】【KMP】HDU 5763 Another Meaning
  7. svn的使用总结(待补充)
  8. 闭包中this指向window的原因
  9. Composer笔记
  10. java基础之接口(抽象类与接口的区别)
  11. 通过git上传本地代码到github仓库
  12. POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)
  13. ch02 课下作业
  14. 【原创】Dependency Walker
  15. Android 广播代码的发送与接收
  16. 表单提交的3种方式,http post的contentType
  17. cursor: pin S产生原理及解决方法
  18. [转载]Firefox插件(plugins)开发实用指南
  19. sh 脚本
  20. 13、Java并发编程:线程池的使用

热门文章

  1. 20162326 齐力锋 2017-2018学期 Bag类的补写博客
  2. 安装MySQL 5.6
  3. js异步获取数据的问题
  4. 用idea编译器写第一个Java程序——步骤
  5. spring cloud 基本小结
  6. Python基础笔记系列三:list列表
  7. JDK_如何查看安装的jdk是32位还是64位?
  8. LeetCode第[15]题(Java):3Sum (三数之和为目标值)——Medium
  9. 利用大数据技术处理海量GPS数据
  10. uva11827gcd