ios iphone objective-c uicollectionview alassetslibrary

Cómo mostrar video desde ALAsset a UICollectionview ios



iphone objective-c (2)

En primer lugar, tome el código [_collectionView reloadData] de ALAssetsGroupEnumerationResultsBlock (el bloque que pasó a -enumerateAssetsUsingBlock: ya que llamará a -reloadData para todos los conjuntos de AVA encontrados.

Hay una aplicación de muestra " MyImagePicker " disponible de Apple que hace exactamente lo que quiere hacer. Puedes estudiar el trabajo desde allí.

ALAsset continuación el código para obtener todos los videos de la biblioteca de fotos mediante ALAsset . Por ahora, quiero mostrar todos los videos en una UICollectionview pero no parece mostrar nada. Por favor, dame un consejo. Gracias por adelantado.

-ViewDidLoad (): obtenga todos los videos de Photo Library

allVideos = [[NSMutableArray alloc] init]; ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init]; [assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (group) { [group setAssetsFilter:[ALAssetsFilter allVideos]]; [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) { if (asset) { dic = [[NSMutableDictionary alloc] init]; ALAssetRepresentation *defaultRepresentation = [asset defaultRepresentation]; NSString *uti = [defaultRepresentation UTI]; NSURL *videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti]; NSString *title = [NSString stringWithFormat:@"video %d", arc4random()%100]; UIImage *image = [self imageFromVideoURL:videoURL]; [dic setValue:image forKey:@"image"]; [dic setValue:title forKey:@"name"]; [dic setValue:videoURL forKey:@"url"]; [allVideos addObject:dic]; [_collectionView reloadData]; } }]; } } failureBlock:^(NSError *error) { NSLog(@"error enumerating AssetLibrary groups %@/n", error); }];

-imageFromVideoURL ():

- (UIImage *)imageFromVideoURL:(NSURL*)videoURL { // result UIImage *image = nil; // AVAssetImageGenerator AVAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];; AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; imageGenerator.appliesPreferredTrackTransform = YES; // calc midpoint time of video Float64 durationSeconds = CMTimeGetSeconds([asset duration]); CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600); // get the image from NSError *error = nil; CMTime actualTime; CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:midpoint actualTime:&actualTime error:&error]; if (halfWayImage != NULL) { // CGImage to UIImage image = [[UIImage alloc] initWithCGImage:halfWayImage]; [dic setValue:image forKey:@"name"]; NSLog(@"Values of dictionary==>%@", dic); NSLog(@"Videos Are:%@",videoURL); CGImageRelease(halfWayImage); } return image; }

Comience a mostrar todas las miniaturas de video a UICollectionView:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return allVideos.count; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; NSLog(@"allvideo %@", allVideos); ALAsset *alasset = [allVideos objectAtIndex:indexPath.row]; return cell; }


Reemplace esta línea: -

[allVideos addObject:dic];

Con

[allVideos addObject: asset];

Y en este método:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; NSLog(@"allvideo %@", allVideos); ALAsset *alasset = [allVideos objectAtIndex:indexPath.row]; yourImageView.image = [UIImage imageWithCGImage:alasset.thumbnail]; }