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的view controller

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值