码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-07-02 07:38:53      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

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

  技术分享



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

标签:

原文地址:http://www.cnblogs.com/Sunlimi/p/UIImagePicker.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!