1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 4 UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:_item.image0]; 5 6 UIImageView *imageView = [[UIImageView alloc] init]; 7 _imageView = imageView; 8 [imageView sd_setImageWithURL:[NSURL URLWithString:_item.image1] placeholderImage:image]; 9 CGFloat h = XMGScreenW / _item.width * _item.height; 10 imageView.frame = CGRectMake(0, 0, XMGScreenW, h); 11 [_scroolView addSubview:imageView]; 12 13 if (_item.is_bigPicture) { 14 _scroolView.contentSize = CGSizeMake(0, h); 15 16 if (_item.height > h) { 17 CGFloat scale = _item.height / h; 18 //2.设置缩放比例 19 _scroolView.maximumZoomScale = scale; 20 _scroolView.minimumZoomScale = 1; 21 } 22 } else { 23 imageView.center = CGPointMake(XMGScreenW * 0.5, XMGScreenH * 0.5); 24 } 25 // 缩放 26 //1.设置代理,告诉它哪个View需要做缩放 27 //2.设置缩放比例 28 _scroolView.delegate = self; 29 } 30 #pragma mark - UIScrollViewDelegate 31 // 作用:返回需要做缩放的view 32 // 调用:每次缩放的时候才会调用 33 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 34 { 35 return _imageView; 36 }
二.保存图片到相册 1.保存图片到相册也有两种方法 1.1 调用系统方法保存到相册 优点:简单快捷,两个方法就能实现 缺点:只能保存到系统相册下,不能保存到自定义的相册下 注意:监听图片是否保存完成的方法,必须是系统指定的方法,可以跳进保存图片到相册的方法里面查看该方法 1.2 用 Photos框架,自定义相册保存图片 优点:能把图片保存到指定的相册 缺点:diamante量大,需要学习新的框架 保存到系统相册源代码
1 // 点击保存调用 2 - (IBAction)save:(id)sender { 3 // 保存系统相册 4 UIImageWriteToSavedPhotosAlbum(_imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 5 } 6 // 询问下用户是否允许当前app访问相册 7 // 监听图片是否保存完成 8 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 9 { 10 if (error) { 11 [SVProgressHUD showErrorWithStatus:@"保存失败"]; 12 } else { 13 [SVProgressHUD showSuccessWithStatus:@"保存成功"]; 14 } 15 }
2.如何学习一个新的框架 2.1 首先搞清楚这个框架常用的类 2.2 怎么搞清楚,哪些类常用? 2.2.1 百度(天朝的度娘太复杂,多变) 2.2.2 查看官方文档 2.3 怎么能快速定位相关框架的官方文档? 搜索关键字: 框架名称 + FrameWork Reference
2.4 如何学习去使用一个类(方法)? 按住 option 点击类名 或方法名 总结:1.如果想了解类,有哪些东西,跳头文件 2.如果想了解怎么使用,用option
3.用 Photos框架,自定义相册保存图片 3.1 保存图片到相册原理 3.1.1 创建新的相册 3.1.2 先把图片保存到系统相册 3.1.3 把图片从系统相册拷贝到新的相册 Photos常用5个类,操作相册
1 // 点击保存调用 2 - (IBAction)save:(id)sender { 3 //查看当前app授权状态 4 PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; 5 switch (status) { 6 case PHAuthorizationStatusNotDetermined: 7 { // 未授权,弹出授权框 8 [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { 9 // 用户选择完毕就会调用—选择允许,直接保存 10 if (status == PHAuthorizationStatusAuthorized) { 11 [self savePhoto]; 12 } 13 }]; 14 选择不允许访问,就不保存 15 break; 16 } 17 case PHAuthorizationStatusAuthorized: 18 { // 授权,就直接保存 19 [self savePhoto]; 20 break; 21 } 22 default: 23 {// 拒绝 告知用户去哪打开授权 24 [SVProgressHUD showInfoWithStatus:@"打开设置 -> 查找百思不得姐 -> 打开照片开关 -> 允许当前app访问系统相册就可以保存图片"]; 25 break; 26 } 27 } 28 } 29 30 // 添加图片到自己相册 31 - (void)savePhoto 32 { 33 [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 34 // 1.创建图片请求类(创建系统相册中新的图片)PHAssetCreationRequest 35 // 把图片放在系统相册 36 PHAssetCreationRequest *assetCreationRequest = [PHAssetCreationRequest creationRequestForAssetFromImage:_imageView.image]; 37 38 // 2.创建相册请求类(修改相册)PHAssetCollectionChangeRequest 39 PHAssetCollectionChangeRequest *assetCollectionChangeRequest = nil; 40 41 // 获取之前相册 42 PHAssetCollection *assetCollection = [self fetchAssetCollection:@"百思不得姐"]; 43 44 // 判断是否已有相册 45 if (assetCollection) { 46 // 如果存在已有同名相册 指定这个相册,创建相册请求修改类 47 assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection]; 48 } else { //不存在,创建新的相册 49 assetCollectionChangeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"百思不得姐"]; 50 } 51 // 3.把图片添加到相册中 52 // NSFastEnumeration:以后只要看到这个,就可以表示数组 53 //assetCreationRequest.placeholderForCreatedAsset 图片请求类占位符(相当于一个内存地址) 54 //因为creationRequestForAssetFromImage方法是异步实行的,在这里不能保证 assetCreationRequest有值 55 56 [assetCollectionChangeRequest addAssets:@[assetCreationRequest.placeholderForCreatedAsset]]; 57 58 } completionHandler:^(BOOL success, NSError * _Nullable error) { 59 60 if (success) { 61 [SVProgressHUD showSuccessWithStatus:@"保存成功"]; 62 } else { 63 [SVProgressHUD showErrorWithStatus:@"保存失败"]; 64 } 65 66 }]; 67 } 68 69 // 指定相册名称,获取相册 70 - (PHAssetCollection *)fetchAssetCollection:(NSString *)title 71 { 72 // 获取相簿中所有自定义相册 73 PHFetchResult *result = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; 74 遍历相册,判断是否存在同名的相册 75 for (PHAssetCollection *assetCollection in result) { 76 if ([title isEqualToString:assetCollection.localizedTitle]) { 存在,就返回这个相册 77 return assetCollection; 78 } 79 } 80 return nil; 81 }