【问题标题】:Flicker while dismissing UIViewController关闭 UIViewController 时闪烁
【发布时间】:2014-05-08 08:09:06
【问题描述】:

我有一个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 显示之前有一个闪烁。

【问题讨论】:

  • 短视频怎么样?会更容易理解闪烁出现的位置。

标签: ios objective-c uiviewcontroller


【解决方案1】:

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

为避免在addAnimation:forKey:之前添加这两行

fadeOut.removedOnCompletion = NO;
fadeOut.fillMode = kCAFillModeForwards;

【讨论】:

    【解决方案2】:

    您是否尝试过如下方式?

    [UIView animateWithDuration:0.4 animations:^
        {
           self.view.alpha = 0.0;
    
        } completion:^(BOOL finished)
        {
            [self dismissViewControllerAnimated:NO completion:nil];
        }];
    

    您可以使用self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;代替上述方法

    【讨论】:

      【解决方案3】:

      尝试将该视图控制器的不透明设置切换为是/否

      默认值是 YES,所以你可能想试试 NO

      【讨论】:

      • 切换意义?切换成什么?我把它改成了 0.0f 对吧?
      • 在完成块中还是在动画中?
      • 在该视图控制器初始化时
      • 没有帮助。当我按下父VC中的设置按钮时尝试这样做。还是什么都没有。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2021-07-19
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      相关资源
      最近更新 更多