iphone UIImageWriteToSavedPhotosAlbum 保存图片
2015-11-26 14:24
531 查看
http://blog.sina.com.cn/s/blog_7d35fa1a0101i5op.html
有时候你的应用需要将应用中的图片保存到用户iPhone或者iTouch的相册中。可以使用UIKit的这个类方法来完成。
image
要保存到用户设备中的图片
completionTarget
当保存完成后,回调方法所在的对象
completionSelector
当保存完成后,所调用的回调方法。 形式如下:
contextInfo
可选的参数,保存了一个指向context数据的指针,它将传递给回调方法。
比如你可以这样来写一个存贮照片的方法:
回调方法看起来可能是这样:
其实都不是,批量存图会让iphone或者ipad运行不过来,上一张还没存好,下一张存图任务又来了,这时候系统就会报告忙而存储失败。
怎么解决呢?如果那个软件没有做一张一张存图的功能那就没法解决。比如邮箱里的照片存不成功只能一张张存或者看rp咯~~~如果非要批量存储就得开发者来改善了。以下为码农时间:
通常在使用UIImageWriteToSavedPhotosAlbum时都是只给image一个参数,其它设为nil,所以有没有错也不知道,无声无息就存了。为了看出了什么错,得给它写成这样
(代码参考这里Image cannot be saved using UIImageWriteToSavedPhotosAlbum to photo album)
[/code]
我在xcode得到的错误信息:
Error Domain=ALAssetsLibraryErrorDomain
Code=-3301 "写入正忙" UserInfo=0x741fc10 {NSLocalizedFailureReason=写入此资产时出现问题,因为写入资源正忙。, NSLocalizedRecoverySuggestion=, NSLocalizedDescription=写入正忙}
参考代码里面得到的是:
Error Domain=ALAssetsLibraryErrorDomain Code=-3304 "Failed to encode image for saved photos." UserInfo=0x7857630 {NSUnderlyingError=0x7851f20
"Failed to encode image for saved photos.", NSLocalizedDescription=Failed to encode image for saved photos.}
还有位仁兄得到的是:
Error Domain=ALAssetsLibraryErrorDomain Code=-3310
"Data unavailable" UserInfo=0x593bf10 {NSLocalizedRecoverySuggestion=Launch the Photos application, NSLocalizedDescription=Data unavailable}
大家同病相怜~
故障就出在UIImageWriteToSavedPhotosAlbum把图片存到相册不是瞬间的,会经过一段计算时间,若不管它的疾苦死命调用它就会造成存储失败,最后存了等于没存。还会令任务队列阻塞,特别是会让UI消息得不到及时响应,那就糟糕了!
解决方法参考这里(Save
multiple wallpapers to Photos Album, UIImageWriteToSavedPhotosAlbum)。它把前因后果讲得很清楚(我前面啰嗦的那些丷丷),还给出了一堆没有排版好的代码(很有用哦!)中心思想摘录如下:
The solution is to copy photos one by one:
解决办法是一张一张拷贝图片:
create an array of image names, e.g. wallpapers
开一个图片array
copy one
拷贝一个
catch complete selector
存完进入到didFinishSavingWithError
goto #2
从第二步继续到存完所有图
当然每个软件都有不同的存储流程,第一步开一个array会非常耗内存,我在CamDiary里面是:
生成一张图
存图UIImageWriteToSavedPhotosAlbum
等待进入didFinishSavingWithError
从第一步继续到存完所有图
记住这句话:UIImageWriteToSavedPhotosAlbum 单用靠不住,didFinishSavingWithError 结合有出路。
有时候你的应用需要将应用中的图片保存到用户iPhone或者iTouch的相册中。 可以使用UIKit的这个类方法来完成。
image
要保存到用户设备中的图片
completionTarget
当保存完成后,回调方法所在的对象
completionSelector
当保存完成后,所调用的回调方法。 形式如下:
contextInfo
可选的参数,保存了一个指向context数据的指针,它将传递给回调方法。
比如你可以这样来写一个存贮照片的方法:
回调方法看起来可能是这样:
有时候你的应用需要将应用中的图片保存到用户iPhone或者iTouch的相册中。可以使用UIKit的这个类方法来完成。
1 2 3 4 5 6 | void UIImageWriteToSavedPhotosAlbum ( UIImage *image, idcompletionTarget, SEL completionSelector, void *contextInfo ); |
要保存到用户设备中的图片
completionTarget
当保存完成后,回调方法所在的对象
completionSelector
当保存完成后,所调用的回调方法。 形式如下:
1 2 3 | - (void) image: (UIImage *) image didFinishSavingWithError: (NSError *)error contextInfo: (void *) contextInfo; |
可选的参数,保存了一个指向context数据的指针,它将传递给回调方法。
比如你可以这样来写一个存贮照片的方法:
1 2 3 4 5 | // 要保存的图片 UIImage *img = [UIImage imageNamed:@"ImageName.png"]; // 保存图片到相册中UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | - (void)image:(UIImage *)image didFinishSavingWithError:(NSError*)error contextInfo:(void *)contextInfo { // Was there an error? if(error != NULL) { // Show error message... } else // No errors { // Show message image successfully saved } } |
为什么图片会存不进iOS的相册?
不知道大家有没有遇到这样的情况,收到一封带几张图片附件的email,高高兴兴点击“存储x幅图片”,跑到相册准备欣赏却发现只有一张半张(坏掉了)。再存,发现还是一样的毛病。心想可能是相册满了吧,可是清空了相册还是没有改善,于是就觉得不会是手机坏了吧?是邮箱或者网络偶尔出毛病吧?其实都不是,批量存图会让iphone或者ipad运行不过来,上一张还没存好,下一张存图任务又来了,这时候系统就会报告忙而存储失败。
怎么解决呢?如果那个软件没有做一张一张存图的功能那就没法解决。比如邮箱里的照片存不成功只能一张张存或者看rp咯~~~如果非要批量存储就得开发者来改善了。以下为码农时间:
通常在使用UIImageWriteToSavedPhotosAlbum时都是只给image一个参数,其它设为nil,所以有没有错也不知道,无声无息就存了。为了看出了什么错,得给它写成这样
UIImageWriteToSavedPhotosAlbum(saved, self,@selector(image:didFinishSavingWithError:contextInfo:), nil); 然后去自己按照
UIImageWriteToSavedPhotosAlbum要求
格式写的 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 里看 NSLog(@"%@", error)运行出来是什么。
(代码参考这里Image cannot be saved using UIImageWriteToSavedPhotosAlbum to photo album)
[/code]
我在xcode得到的错误信息:
Error Domain=ALAssetsLibraryErrorDomain
Code=-3301 "写入正忙" UserInfo=0x741fc10 {NSLocalizedFailureReason=写入此资产时出现问题,因为写入资源正忙。, NSLocalizedRecoverySuggestion=, NSLocalizedDescription=写入正忙}
参考代码里面得到的是:
Error Domain=ALAssetsLibraryErrorDomain Code=-3304 "Failed to encode image for saved photos." UserInfo=0x7857630 {NSUnderlyingError=0x7851f20
"Failed to encode image for saved photos.", NSLocalizedDescription=Failed to encode image for saved photos.}
还有位仁兄得到的是:
Error Domain=ALAssetsLibraryErrorDomain Code=-3310
"Data unavailable" UserInfo=0x593bf10 {NSLocalizedRecoverySuggestion=Launch the Photos application, NSLocalizedDescription=Data unavailable}
大家同病相怜~
故障就出在UIImageWriteToSavedPhotosAlbum把图片存到相册不是瞬间的,会经过一段计算时间,若不管它的疾苦死命调用它就会造成存储失败,最后存了等于没存。还会令任务队列阻塞,特别是会让UI消息得不到及时响应,那就糟糕了!
解决方法参考这里(Save
multiple wallpapers to Photos Album, UIImageWriteToSavedPhotosAlbum)。它把前因后果讲得很清楚(我前面啰嗦的那些丷丷),还给出了一堆没有排版好的代码(很有用哦!)中心思想摘录如下:
The solution is to copy photos one by one:
解决办法是一张一张拷贝图片:
create an array of image names, e.g. wallpapers
开一个图片array
copy one
拷贝一个
catch complete selector
存完进入到didFinishSavingWithError
goto #2
从第二步继续到存完所有图
当然每个软件都有不同的存储流程,第一步开一个array会非常耗内存,我在CamDiary里面是:
生成一张图
存图UIImageWriteToSavedPhotosAlbum
等待进入didFinishSavingWithError
从第一步继续到存完所有图
记住这句话:UIImageWriteToSavedPhotosAlbum 单用靠不住,didFinishSavingWithError 结合有出路。
有时候你的应用需要将应用中的图片保存到用户iPhone或者iTouch的相册中。 可以使用UIKit的这个类方法来完成。
1 2 3 4 5 6 | void UIImageWriteToSavedPhotosAlbum ( UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo ); |
要保存到用户设备中的图片
completionTarget
当保存完成后,回调方法所在的对象
completionSelector
当保存完成后,所调用的回调方法。 形式如下:
1 2 3 | - (void) image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo; |
可选的参数,保存了一个指向context数据的指针,它将传递给回调方法。
比如你可以这样来写一个存贮照片的方法:
1 2 34 | // 要保存的图片 UIImage *img = [UIImage imageNamed:@"ImageName.png"]; // 保存图片到相册中 UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); |
1 2 3 4 5 67 | - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { // Was there an error? if (error != NULL) { // Show error message... } else // No errors { // Show message image successfully saved } } |
相关文章推荐
- [ 教程 ] 小米4 MI4 cancro 刷完win10预览版后回到MIUI
- 553 authentication is required,smtp3,DdGowEDJuUGnoVZWtkIPAA--.5044S2 1448518056
- 理解 Android Build 系统
- Gradle build设置自动log开关
- leetcode_Range Sum Query - Immutable
- 百度UEditor编辑器ueditor.setContent总是报错
- 给UIAlertView添加手势使点击区域外弹框消失
- JS生成UUID的方法实例
- ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)
- request.getParameter()获取不到数据的问题
- UISlider用法详解
- 用UIButton的titleEdgeInsets属性和 imageEdgeInsets属性实现图片文字按要求排列
- SOUI中自定义窗口不能适应图片大小问题解决
- hdu 1858 Max Partial Value I
- hdu 1858 Max Partial Value I
- Android ActivityThread(主线程或UI线程)简介
- iOS---UIScrollView控件介绍
- Machine Learning week 6 quiz: Machine Learning System Design
- Machine Learning week 6 quiz: programming assignment-Regularized Linear Regression and Bias/Variance
- [LeetCode288]Unique Word Abbreviation