我在UIViews上使用FXBlurView进行背景模糊处理。我使用默认设置,这意味着它会更新每一帧。然而,由于某种原因,背景似乎有点滞后。这是我遇到的问题的GIF:
BlurGIFhttp://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);
}];
然而,它似乎没有正确更新/定位。提前谢谢!
扩展@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);
}];
谢谢!
FXBlurView无法始终跟上视图的大小,或者底层视图非常复杂。
有一个有效的技巧,你只渲染模糊一次,然后调整可见区域,而不是每帧都重新绘制。如果您查看FXBlurView中包含的滑动覆盖示例,您可以看到这是如何实现的。