FXBlurView背景滞后

时间:2014-04-11 23:14:03

标签: ios uiview blur

我正在使用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);
}];

但是,它似乎没有正确更新/定位。提前谢谢!

2 个答案:

答案 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附带的滑动叠加示例,你可以看到它是如何完成的。