环境: XCode5, single view application template
打开相册或照相机需要实现协议UIImagePickerControllerDelegate与UINavigationControllerDelegate,email图片需要实现
协议MFMailComposeViewControllerDelegate,在头文件中需要导入#import <MessageUI/MessageUI.h>
整个UI界面如下:
知识点:
1
及![](https://img-blog.csdn.net/20140503115214921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGlhbkxpbmc5MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
协议的使用
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
总共有四种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中完成
[super viewDidAppear:animated];
if(!self.startUp){
//check camera 是否可用, 不可用则打开Photos library
if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
[self doBtnPhotosLibrary:nil];
self.startUp = YES;
}
}
}