解雇UIViewController时闪烁

时间:2014-05-08 08:09:07

标签: ios objective-c uiviewcontroller

我有UIViewController我正在使用自定义转换(用于模糊)。当我按下关闭按钮时,我希望UIViewController淡出。我减少了视图的不透明度,它会逐渐消失。在完成块中,我忽略了UIViewController。它被解雇了,但是在解雇完成之后很快就会出现闪烁。

这就是我正在做的事情:

- (IBAction)closePressed:(id)sender {

    [CATransaction setCompletionBlock:^{
        [self dismissViewControllerAnimated:NO completion:nil];
    }];
    CABasicAnimation *fadeOut = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeOut.fromValue = [NSNumber numberWithFloat:1.0];
    fadeOut.toValue = [NSNumber numberWithFloat:0.0];
    fadeOut.duration = 0.4f;
    [self.view.layer addAnimation:fadeOut forKey:@"fadeOut"];
}

无法快速粘贴屏幕截图或任何内容。在显示父UIViewController之前有一个闪烁。

3 个答案:

答案 0 :(得分:3)

当您通过CAAnimation设置动画时,实际上是动画视图的表示层,而不是实际视图。因此,当动画结束时,您将以动画开始之前的视图结束。

为避免在addAnimation:forKey:

之前添加这两行
fadeOut.removedOnCompletion = NO;
fadeOut.fillMode = kCAFillModeForwards;

答案 1 :(得分:0)

您是否尝试过如下?

[UIView animateWithDuration:0.4 animations:^
    {
       self.view.alpha = 0.0;

    } completion:^(BOOL finished)
    {
        [self dismissViewControllerAnimated:NO completion:nil];
    }];

您可以使用self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

代替上述方法

答案 2 :(得分:0)

尝试将该viewcontroller的不透明设置切换为YES / NO

默认值为YES,因此您可能想尝试NO