About iOS Select an album in icloud cloud tablets and videos recommended: Tzimagepickercontroller source, this is a very reliable album selection of pictures and videos of the library. Of course, you can also write the following problems
Working reason, need to handle access to a video module, in the video selection encountered a not easy to find the bug, the reason is due to the small cell phone memory, and the user opened the album Sync icloud,
Load a picture in
At this point, if the locally available memory is too small, it causes
Delete a picture or video from a local photo album with only thumbnails, and if you want to select this image when the app calls, you need to download it from the icloud cloud.
To get the original image or video.
Below the PO under solution:
If you have previously dealt with the album problem, then the following code is certainly not unfamiliar, is very common two system-level request callback, get the corresponding image, video.
// Get Image [[Phimagemanager Defaultmanager] Requestimagedataforasset:asset options:nil resulthandler:^ (NSData * _Nullable ImageData, NSString * _nullable Datauti, uiimageorientation orientation, nsdictionary * _nullable info) {}]; // Get Video [[Phimagemanager Defaultmanager] Requestplayeritemforvideo:asset options:nil resulthandler:^ (AVPlayerItem * _ Nullable Playeritem, Nsdictionary * _nullable info) { if (completion) completion (Playeritem, info);}];
But I often don't notice what the second input options
is for,
In fact, the solution comes from PHImageRequestOptions
this PHVideoRequestOptions
.
All of these two options
have a common parameter
@property (nonatomic, assign, getter=isnetworkaccessallowed) BOOL networkaccessallowed; // if necessary would download the image from ICloud (client can monitor or cancel using Progresshandler). Defaults to NO (see Start/stopcachingimagesforassets)
The explanation of the system is also very detailed, if assigned YES
, then allows iCloud
to get pictures and videos from, by default NO
.
Although this problem is not difficult to solve, but often easy to ignore, so record a bit.
Thank you very much for the Tzimagepickercontroller source, this is a very reliable photo album selection of image video library, and is still in maintenance. Interested can chain take a look at the source code, write very well.
Bo Main blog @harwordliu
The following PO is a complete solution to this problem code:
///Get Video- (void) Getvideooutputpathwithasset: (Phasset *) Asset Completion: (void(^) (NSString *OutputPath)) Completion {phvideorequestoptions* Options =[[Phvideorequestoptions alloc] init]; Options.version=phvideorequestoptionsversionoriginal; Options.deliverymode=phvideorequestoptionsdeliverymodeautomatic; Options.networkaccessallowed=YES; [[Phimagemanager Defaultmanager] Requestavassetforvideo:asset options:options resulthandler:^ (avasset* avasset, avaudiomix* Audiomix, nsdictionary*info) { //NSLog (@ "info:\n%@", Info);Avurlasset *videoasset = (avurlasset*) Avasset; //NSLog (@ "Avasset URL:%@", myasset.url);[self startexportvideowithvideoasset:videoasset completion:completion]; }];}///Get Image-(Phimagerequestid) Getphotowithasset: (Phasset *) Asset Photowidth: (cgfloat) Photowidth completion: (void(^) (UIImage *, Nsdictionary *, BOOL isdegraded)) Completion {Phasset*phasset = (Phasset *) Asset; CGFloat Aspectratio= Phasset.pixelwidth/(cgfloat) phasset.pixelheight; CGFloat pixelwidth= Photowidth *2.0; CGFloat pixelheight= Pixelwidth/Aspectratio; Cgsize imageSize=Cgsizemake (Pixelwidth, pixelheight); //fixed an instantaneous memory problem when getting picturesPhimagerequestoptions *option =[[Phimagerequestoptions alloc] init]; Option.resizemode=Phimagerequestoptionsresizemodefast; Phimagerequestid Imagerequestid= [[Phimagemanager Defaultmanager] Requestimageforasset:asset targetsize:imagesize contentmode: Phimagecontentmodeaspectfill options:option resulthandler:^ (UIImage * _nullable result, nsdictionary *_nullable Info) {BOOL downloadfinined= (! [[Info Objectforkey:phimagecancelledkey] Boolvalue] &&![Info objectforkey:phimageerrorkey]); if(downloadfinined &&result) { if(completion) completion (Result,info,[[info Objectforkey:phimageresultisdegradedkey] boolValue]); } //Download image from icloud/download pictures from icloud if([info Objectforkey:phimageresultisincloudkey] &&!result) {phimagerequestoptions*option =[[Phimagerequestoptions alloc]init]; Option.networkaccessallowed=YES; Option.resizemode=Phimagerequestoptionsresizemodefast; [[Phimagemanager Defaultmanager] Requestimagedataforasset:asset options:option resulthandler:^ (NSData * _nullable imageData, NSString * _nullable Datauti, uiimageorientation orientation, nsdictionary *_nullable Info) {UIImage*resultimage = [UIImage imagewithdata:imagedata scale:0.1]; if(completion) completion (Resultimage,info,[[info Objectforkey:phimageresultisdegradedkey] boolValue]); }]; } }]; returnImagerequestid;}
iOS choose the processing of icloud tablets and videos in albums