我正在使用FXBlurView为我的UIViews背景模糊。我正在使用默认设置,这意味着它会更新每一帧。但是,出于某种原因,背景似乎有点滞后。这是我所拥有的问题的GIF:
BlurGIF http://www.interdazzle.com/misc/forums/BlurGIF.gif
如果有人可以提供帮助,那就太棒了。
提前谢谢!
编辑:我改变了我的代码以匹配Nick建议的内容,并想出了这个: 初始化时:
self.sidebar.blurRadius = 30;
self.sidebar.dynamic = NO;
self.sidebar.contentMode = UIViewContentModeLeft;
[self.sidebar updateAsynchronously:YES completion:^{
self.sidebar.frame = CGRectMake(0, 0, 250, [[UIScreen mainScreen] bounds].size.height);
}];
当我为它制作动画时:
[UIView animateWithDuration:0.5 animations:^{
BOOL open = self.sidebar.frame.size.width >= 250;
self.sidebar.frame = CGRectMake(open? -250: 0, self.sidebar.frame.origin.y, open? 0: 250, self.sidebar.frame.size.height);
}];
但是,它似乎没有正确更新/定位。提前谢谢!
答案 0 :(得分:3)
扩大@ NickLockwood的问题:
启动FXBlurView时,我运行以下代码:
self.sidebar.blurRadius = 30;
self.sidebar.dynamic = NO;
self.sidebar.contentMode = UIViewContentModeRight;
self.sidebar.layer.contentsGravity = kCAGravityBottomLeft;
[self.sidebar setClipsToBounds:YES];
[self.sidebar updateAsynchronously:YES completion:^{
// Whatever you want
}];
然后我简单地为这个对象设置动画:
[UIView animateWithDuration:0.5 animations:^{
BOOL open = self.sidebar.frame.size.width > 125; // Over half way done
self.sidebar.frame = CGRectMake(0,0, open? 0 : 250, [[UIScreen mainScreen] bounds].size.height);
}];
谢谢!
答案 1 :(得分:1)
如果视图的大小非常大,或者底层视图非常复杂,FXBlurView无法始终跟上。
有效地执行此操作,您只需渲染一次模糊,然后调整可见区域,而不是每帧重绘一次。如果你看一下FXBlurView附带的滑动叠加示例,你可以看到它是如何完成的。