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("完成选择");

        }
    }

  



时间: 2024-10-14 01:16:03

MonoTouch - iOS 使用 UIImagePickerController 打开图片库和相机选择图片修改头像的相关文章

ios 图片库和相机选择图片界面修改为简体中文

使用UIImagePickerController 打开图片库和相机选择图片界面一般为英文描述,所以修改为简体中文的方法在info.plist文件中:

Android调用系统相册和相机选择图片并显示在imageview中

Android调用系统相册和相机选择图片并显示在imageview中,在系统调用相机拍摄中,直接返回的是经过压缩处理后的图像,当你直接把返还后的图片放在imageview中时 图片就会非常的模糊,所以要经过先存放在sd中,然后在处理并显示.当调用系统相册时,因为Android系统从4.4版本以后系统不再返回真实的uri路径,而是封装过后的uri路径,所以当你写代码时必须注意,4.4是一个分水岭,4.4以上的版本必须就通过解析和相应的处理才能获取到真实的uri路径. 先上程序运行的结果. 这个是调

本地图片选择(打开媒体库,选择图片)

在此调查中我要实现的是:点击Pictures按钮后,获取手机内所有图片,选择某一个图片,并显示到ImageView中. 应用范围: 图片上传时的图片选择  , 类似"浏览". 效果: 所有的图片都会列出来,包括目录. 在Activity Action里面有一个“ACTION_GET_CONTENT”字符串常量,该常量让用户选择特定类型的数据,并返回该数据的URI.我们利用该常量,然后设置类型为“image/*”,就可获得android手机内的所有image. main.xml : [x

ios 开发选取头像,图片库,相机,裁取图片

需要遵守的代理协议:UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate @property (nonatomic, strong) UIActionSheet *avatarActionSheet; 第一步:点击头像cell需要做的事情 [self.avatarActionSheet showInView:self.view]; 第二步: #pragma mark - 点击头像

IOS研究院之打开照相机与本地相册选择图片

如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样.最终点击发送将按钮将图片2进制图片上传服务器. 下面我们仔细学习具体的细节.创建一个空的IOS项目,接着在创建一个ViewController. AppDelegate.h 应用的代理类 这个没什么好说的就是直接打开刚刚创建的新ViewController. 1 #import <UIKit/UIKit.h> 2 #import "Test

iOS中 读取相册,调用系统相机 技术分享

技术内容:分别读取相册以及调取相机,将图片显示到imageView上 布局: 1.创建imageView 和 button 并为button一个关联pickerImage的事件 [objc] view plaincopy <div style="text-align: left;"><span style="font-family: Helvetica; -webkit-text-stroke-width: initial;">    sel

IOS中UIImagePickerController中文界面问题

今天沈阳斌子,写IOS项目遇到一个调用照相机的问题,找到解决方法,快速解决了拿给PM看,结果PM说程序调用的照相机不是中文的是英文的,必须改成中文,上网找到了方法,试用后好用拿出来和大家分享.方法如下,总共分两步: 一: Target-->Localization native development region : China 本地化的开发语言版本选择China 没有的话添加一下. 二:Project-->Localizations  添加Chinese 中文包 这点挺重要的要想实现中文显

iOS程序中打开其他程序的方法

1.1 如果被打开程序不是自己的,则要找到被打开App的URL Schemes. http://jbguide.me/2012/09/12/how-to-find-url-schemes%EF%BC%9F/ 1.2 如果被打开程序是自己写的,那么写程序时要实现 1) appname-info.plist里增加 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes<

iOS 使用XCode6打开项目以后再用XCode5出现的问题fatal error: malformed or corrupted AST file: &#39;Unable to load module

使用不同版本的XCode出现的问题: fatal error: malformed or corrupted AST file: 'Unable to load module "/Users/xxx/Library/Developer/Xcode/DerivedData/ModuleCache/XYZYIE6ZV0OP/Darwin.pcm": file not found' note: after modifying system headers, please delete the