【Xamarin】MonoTouch - iOS 使用 UIImagePickerController 打开图片库和相机选择图片修改头像
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("完成选择");
}
}

【Xamarin】MonoTouch - iOS 使用 UIImagePickerController 打开图片库和相机选择图片修改头像的更多相关文章
- Qt 打开安卓相冊选择图片并获取图片的本地路径
Qt 打开安卓相冊选择图片并获取图片的本地路径 过程例如以下: 通过 Intent 打开安卓的系统相冊. 推荐使用 QAndroidJniObject::getStaticObjectField 获取 ...
- XamarinSQLite教程Xamarin.iOS项目中打开数据库文件
XamarinSQLite教程Xamarin.iOS项目中打开数据库文件 以下是打开MyDocuments.db数据库的具体操作步骤: (1)将Mac电脑上的MyDocuments.db数据库移动到W ...
- IOS研究院之打开照相机与本地相册选择图片
如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样.最终点击发送将按钮将图片2进制图片上传服务器. 下面我 ...
- Visual Studio 2013 Xamarin for iOS 环境搭建
原文:Visual Studio 2013 Xamarin for iOS 环境搭建 一.Mac安装Xamarin.iOS 1,我的Mac 环境:OSX 10.10.3.Xcode 6.3.2 (使用 ...
- IOS研究院之打开照相机与本地相册选择图片(六)
原创文章如需转载请注明:转载自雨松MOMO程序研究院本文链接地址:IOS研究院之打开照相机与本地相册选择图片(六) Hello 大家好 IOS的文章好久都木有更新了,今天更新一篇哈. 这篇文章主要学习 ...
- Property Finder – a Cross-Platform Xamarin MonoTouch Mobile App
Developers are now finding themselves having to author applications for a diverse range of mobile pl ...
- ios 开发选取头像,图片库,相机,裁取图片
需要遵守的代理协议:UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate @prop ...
- iOS开发—— UIImagePickerController获取相册和拍照
一.简单的拍照显示,或是从相册中直接选取照片 #import "ViewController.h" @interface ViewController ()<UIImageP ...
- JS中调用android和ios系统手机打开相机并可选择相册功能
编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/57626154 实现android手机打开相机选择相册 ...
随机推荐
- 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
import random import string def GenKey(length): chars = string.ascii_letters + string.digits return ...
- awk分割列-【AWK学习之旅】
---===AWK学习之旅===--- awk 内置分割函数:split,将列按照指定分割符,分割成数组 用法:split(str1,array,"分隔符") 文件内容: [roo ...
- ErrorHandling in asp.net web api
https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/exception-handling https://d ...
- maven中pom.xml标签介绍
pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以 ...
- Codeforces Round #364 (Div. 2) C. They Are Everywhere 尺取法
C. They Are Everywhere time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- FZU 1759 Super A^B mod C 指数循环节
Problem 1759 Super A^B mod C Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description G ...
- Eclipse下建立简单JNI程序实现返回double类型
在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,ja ...
- 在Windows Server 2012上安装SharePoint 2010 SP1
现在很多企业的系统都开始用上了Windows 2012,最近公司需要建立一个门户系统,一开始就想到了微软的SharePoint2010,这玩意确实非常强悍,2008已经褪去,当然直接在Windows ...
- 【Python】小技巧
1. 退出python shell 在windows下,Ctrl + Z退出 在unix下,Ctrl + D退出
- is(':visible')
.end()为结束前面处理函数,返回到最初的元素 .next()为此元素的下一个元素,可以再加上.next()表示下下一个元素,以此类推 :visible 选择器选取每个当前是可见的元素.语法:$(& ...