如何使用正在进行的动画制作视图的屏幕截图

时间:2014-01-03 10:36:56

标签: ios animation uiview

当我在其下的视图上播放动画时,我需要为导航栏创建模糊效果。动画非常简单CAKeyframeAnimation实例。但即使我使用下面列表中的任何方法随机创建单个快照,它也不起作用:

  • [UIWindow drawViewHierarchyInRect: afterScreenUpdates:YES/NO]
  • [CALayer renderInContext:]
  • [UIView snapshotViewAfterScreenUpdates:YES/NO]

我只看到空白图片。

是否可以捕捉动画中的动画? Mb有一些不同的模糊动画的方法吗?

2 个答案:

答案 0 :(得分:1)

使用FXBlurView非常简单:https://github.com/nicklockwood/FXBlurView

它具有动态模糊的属性,因此您不必在每个点都截取屏幕截图。

@property (nonatomic, getter = isDynamic) BOOL dynamic;

此属性控制FXBlurView是否动态更新,或仅在视图添加到其超级视图时更新一次。默认为YES。注意,动态设置为NO,您仍然可以通过调用setNeedsDisplay或updateAsynchronously强制视图更新:completion:。动态模糊是非常cpu密集的,因此您应该在执行动画之前立即禁用动态视图以避免卡顿。但是,如果您在屏幕上有多个FXBlurViews,那么使用setUpdatesDisabled方法禁用更新比使用动态属性设置为NO更简单

PS:确保添加所有必要的框架以使其正常工作

答案 1 :(得分:0)

模糊视图的最简单方法是添加UIToolbar,只需更改Alpha值即可更改模糊。

self.toolbar = [[UIToolbar alloc]initForAutoLayout];
[self.view addSubview:self.toolbar];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:NAVBAR_HEIGHT];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:0];
self.toolbar.alpha = 0.5;