AI智能
改变未来

ios 学习1:打开相册或照相机获取图片,email 图片

环境: XCode5,  single view application template

打开相册或照相机需要实现协议UIImagePickerControllerDelegate与UINavigationControllerDelegate,email图片需要实现协议MFMailComposeViewControllerDelegate,在头文件中需要导入#import <MessageUI/MessageUI.h>

整个UI界面如下:

             

      

                 

                                                                                        

                                         

知识点:

1  

协议的使用

1.1 先初始化

     

1.2 设置sourceType ,这取决于你想要take a photo还是camera capture

设置sourceType为Camera,既用Camera获取一张图片

设置sourceType为Photos library,联系ipController与photos library controller

同一时间,两者只能二者选一。

1.3 设置的的delegate为self

在这里设置UIImagePickerController 的 delegate为当前的view controller,需要在当前view controller实现方法:

这个方法在选择了一张图片之后会自动调用,通常对获得的图片进行处理,如保存等

1.4 设置呈现新的View controller(打开相册或camera)时的animation

设置过渡时的animation

    

总共有四种style可以设置,设置不同的值代表不同的style,默认

设置新的view 在呈现以后是什么样的,比如全屏呈现或是其他,这里设置为全屏

还可以设定为:

1.5 设置需要呈现的view controller为ipController

根据ipController的source type不同,将打开camera或photos library

1.6 当选择获取完图片之后,将会回到当前的delegate view controller调用方法:

在这里主要对图片保存到当前view controller的一个属性中,

然后用过渡到下一个view  controller,其中[self.storyboard instantiateViewControllerWithIdentifier:@\”ImageViewVController\”]实例化identifier为ImageViewVController的viewcontroller

note : 某些设备可能没有camera,可以用isSourceTypeAvailable方法:来检测camera是否可用,如不可用可以默认打开

photos library,这一切在viewDidAppear中完成

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    if(!self.startUp){
        //check camera  是否可用, 不可用则打开Photos library
        if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
            [self doBtnPhotosLibrary:nil];
            self.startUp = YES;
        }
    }
    
}

的使用

需要在头文件中先导入,实现协议:

2.1 初始化

2.2 设置delegate为current view controller

2.3 从view controller里面获取图片,并把获取的图片以附件的形式添加到mail controller中

从photos library或camera所获取的图片会被显示在

中,在上面显示的scene所对应的view controller中,用获取保存image的view controller,设置image view所显示的图片源具体实现:

隐藏其他的view

要从上面的场景中获取UIImageView所显示的图片,可以先隐藏除UIImageView中的其他view,得到图片以后在取消隐藏用下面的方法隐藏其他的view

获取图片:

用来得到当前view的边界.
调用用前面得到的屏幕边界创建一个位图的context,并设置该context为当前的context调用来获取当前的context,调用设置context的背景颜色调用在该context下给定的mainRect画一个区域调用来把self.view的layer放到指定的context中调用来从这个context中得到图片这个相对应,移除刚才创建的context

刚刚获取的图片newImage1就是想要email的图片
通常email的图片不能太大,所以需要对其做一些处理,下面用一个函数来对所取得的图片进行处理,改变他的大小

主要用给的newSzie来创建一个context并设置为当前的context,然后用所给的image来在当前的context上重新画一个与newSize大小相同的image,然后得到该contex的图片,用这张图片返回

取消隐藏的view

把得到的图片转化为NSData对象

也可以调用UIImageJPEGRepresentation转换为JPEG格式的数据 

添加NSData对象到main controller中

指定图片data的格式,图片的name

2.4 转换到mail controller

2.5 当用户发送完邮件或取消发送之后会调用下面的方法

这里简单的dismiss 该mail controller

  • 点赞
  • 收藏
  • 分享
  • 文章举报

TianLing909发布了3 篇原创文章 · 获赞 0 · 访问量 2402私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » ios 学习1:打开相册或照相机获取图片,email 图片