需要在UICollectionView中显示视频和图像

时间:2017-03-15 09:42:25

标签: ios objective-c iphone swift xcode

需要在UICollectionView中显示视频和图像。

如何在UICollectionView中显示视频和图像的数量。我正在使用JSON从服务器下载资产。

以下是服务器下载图片的代码:

NSDictionary *dictImage = [arrImages objectAtIndex:indexPath.item]; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[dictImage objectForKey:@“imgURL"]]]; 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {        
    [cell.imgGallery setImage:[UIImage imageWithData:imgData]];    
}];

以下是此屏幕的示例链接。

Like Whatsapp

3 个答案:

答案 0 :(得分:5)

就个人而言,我不会将实际视频加载到单元格中的播放器中。您应该生成缩略图图像并使用顶部的播放图标。

然后,当用户选择视频单元格时,您可以在集合视图的顶部显示视频播放器。

您可以同时使用的活动AVPlayers的数量有限,它们将消耗更多的内存和资源。滚动包含AVPlayers的大量单元格会真正减慢单元格渲染速度,最终可能会导致应用程序崩溃

答案 1 :(得分:0)

SDWebImage加载缩略图图片,点击播放按钮,播放任何视频播放器的视频。 在单元格上播放视频时要小心,在播放新视频之前删除之前的视频。

SDWebImage用法 -

[cell.imgGallery sd_setImageWithURL:[NSURL
                 URLWithString:@"image_url"]
                 placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

答案 2 :(得分:0)

对于图像显示,请使用SDWebImage - 异步图像下载。

#import <SDWebImage/UIImageView+WebCache.h>

[imageView sd_setImageWithURL:[NSURL 
URLWithString:@"http://www.example.com/path/to/image.jpg"]
         placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

对于视频显示,请在该videoImage单元格上的Video and Put Play图标中获取placeHolder图像。

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:_videoFileURL options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime time = CMTimeMake(1, 2);
CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
UIImage *one = [[UIImage alloc] initWithCGImage:oneRef];
imgViewVideo.image = one;

点击视频打开AVVideoPlayer

AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc]init];
playerViewController.player = [[AVPlayer alloc]initWithURL:_videoFileURL];
[self presentViewController:playerViewController animated:YES completion:nil];
playerViewController.view.frame = self.view.frame;
[playerViewController.player play];