1.首先,这个软件涉及到手机照相设备的使用以及邮件发送功能还有部分动画功能的实现,我们需要先导入一些OC已有的现成框架(QuartzCore.framework以及MessageUI.framework)
一,在软件中添加进入照相功能和相册功能
2.要在主页面添加照相功能,首先需要一个关于照相以及相片选择的代理<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
添加完以后,在接下来的代码书写中就会出现一些相关的代理函数提示。接下来就是一些与照相有关的函数。首先,我们需要定义一个关于相片的函数,这个函数的作用是设置照片的尺寸。
- (UIImage*)imageWithImage:(UIImage*)imagescaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContext(newSize );
[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnnewImage;
}
其中,第一句代码UIGraphicsBeginImageContext( newSize );是用来创建一个基于位图的context,并设置为当前context,其中参数newSize为新常见的位图上下文的大小。也就是UIGraphicsGetImageFromCurrentImageContext();函数返回的图像大小。
接下来,我们需要一个函数用来在用户拍完相片之后执行:
- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIStoryboard*storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
VCImageEditing*vcImageEditing = [storyboardinstantiateViewControllerWithIdentifier:@"VCImageEditing"];//首先定义一个控制器类,也就是下面需要用到的对相片进行美化编辑的控制器界面
UIImage *i = [infoobjectForKey:UIImagePickerControllerOriginalImage];//选择刚才拍摄的相片
NSLog(@"%f %f", [i size].width,[i size].height);
if (i.size.width > 320 || i.size.height> 480)
i = [self imageWithImage:iscaledToSize:CGSizeMake(320, 480)];//这里是为了保证相片的尺寸不超过屏幕的尺寸
[self dismissViewControllerAnimated:NOcompletion:^{
}];
[vcImageEditing setEditImage:i];
[self presentViewController:vcImageEditinganimated:YES completion:^{
}];
}这是一个代理函数,我们知道,在很多应用软件中如果需要通过相机获取一张相片,在按完快门键后,会出现一个 “使用该相片”的按钮,而上述函数就是在点击了这个按钮之后自动执行的。
当然了,我们还需要设置一个按钮用来触发相机功能。也就是设置一个按钮,连接到下面的函数:
- (IBAction)doCameraBtn:(UIButton *)sender {
UIImagePickerController *ipController =[[UIImagePickerController alloc] init];//先定义一个图片选择器的类对象
if ([[[UIDevice currentDevice] model]
rangeOfString:@"Sim"].location ==NSNotFound)
[ipControllersetSourceType:UIImagePickerControllerSourceTypeCamera];//选择图片的来源设备为相机设备
[ipController setDelegate:self];//这里特别注意,千万不要忘记设置代理为当前控制器(self)
[self presentViewController:ipControlleranimated:YES completion:^{
}];
}
那么,如果我们希望从手机相册中选择已有的相片,需要使用另一个按钮触发下面的函数:
- (IBAction)doPhotoAlbumBtn:(UIButton *)sender {
UIImagePickerController*ipController = [[UIImagePickerController alloc] init];//同样,先定义一个图片选择器类,默认慧聪相机相册中选择已有相片
[ipController setDelegate:self];//设置代理
[self presentViewController:ipController animated:YEScompletion:^{
}];
}