iOS 7 对 videoPlayer 的模糊效果
Posted
技术标签:
【中文标题】iOS 7 对 videoPlayer 的模糊效果【英文标题】:iOS 7 blur effect on videoPlayer 【发布时间】:2014-02-18 08:46:43 【问题描述】:我想在视频播放器上制作模糊效果。 所以我使用 AVPlayer 播放视频,每当我想将视频分享到社交媒体时,就在视频播放器上分享窗口显示。只是我想应用模糊效果来共享窗口的背景。
renderContext 函数不会渲染 AVPlayer 的图层。但是我看到苹果新的API drawViewHierarchyInRect 会渲染特定的层,比如视频播放器或者OpenGL层。
所以我使用了 drawViewHierarchyInRect,它在模拟器上也能正常工作,但在设备上却不行。
有什么想法吗?
- (UIImage *)snapshotOfVideoPlayer
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 1.0);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
【问题讨论】:
是哪个设备?模糊效果/动画是否停止(为了提高效率)? 你能出示你的代码吗? 感谢您的快速回复。设备是装有 ios 7 的 iPad4。它根本不工作。始终为黑色图像。 【参考方案1】:我相信唯一的方法是使用 AVAssetImageGenerator。 假设您有对 AVPlayerItem 的引用:
AVURLAsset *asset = (AVURLAsset *)self.playerItem.asset;
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
CGImageRef thumb = [imageGenerator copyCGImageAtTime:self.playerItem.currentTime
actualTime:NULL
error:NULL];
self.videoScreenshotIV.image = [UIImage imageWithCGImage:thumb];
-
注意 self.playerItem.currentTime。这将确保图像与屏幕截图的时刻完全相同。
videoScreenshotIV 是一个 UIImageView (contentMode scaleAspectFit),它直接位于具有完全相同边界的 avplayer 视图之上。我隐藏这个 UIImageView 直到我需要截屏,然后我首先取消隐藏并设置图像,然后截屏然后再次隐藏它。它完美地工作! :)
【讨论】:
以上是关于iOS 7 对 videoPlayer 的模糊效果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITableViewCell 后台实现实时 iOS 7 模糊效果
iOS 7 导航栏背景模糊效果在 iPhone 4 中不起作用
iOS 7 TableView 中的 ViewController 和 NavigationBar 模糊效果