UI UI动画后屏幕变黑

UI Screen becomes black after UIAnimation

我的问题是... 我有父视图控制器的对象,我想为第二个视图控制器设置动画。 所以我在 parentvc.view 的视图上添加了一个名为 backgroundview 的子视图,然后是需要在 backgroundView 上绘制的视图。 但是在动画完成一秒钟后,我可以看到我想要的视图,但随后它被一个完整的黑屏所取代。

我想我最顶层的视图被重新绘制了,我该如何解决这个问题。

代码:-

- (void)viewDidLoad {
    [super viewDidLoad];

    //_colorCaptureOptions = [NSArray arrayWithObjects: @"Camera", @"Color Slider / Color Wheel", nil];

    mExtractionQueue = [[NSOperationQueue alloc] init];
    [mExtractionQueue setMaxConcurrentOperationCount:1];


    CGRect screenRect = [[UIScreen mainScreen] bounds];

    //CGRect screenRect = self.view.frame;

    self.backgroundView = [[UIView alloc] initWithFrame:screenRect];
    self.backgroundView.backgroundColor = [UIColor clearColor];

    [self.parentVC addChildViewController:self];
    [self.parentVC.view addSubview:self.backgroundView];
    //[self didMoveToParentViewController:self.parentVC];

    UITapGestureRecognizer *guideTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleScrimSelected)];

    [self.backgroundView addGestureRecognizer:guideTap];
    [self.backgroundView addSubview:self.view];
}

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGRect screenRect = [[UIScreen mainScreen] bounds];

        CGFloat viewHeight = 150;

        self.backgroundView.alpha = 0.0;
        self.view.alpha = 1;
        self.view.frame = CGRectMake(0, screenRect.size.height, screenRect.size.width, viewHeight);


        [UIView animateWithDuration:0.2
                              delay:0
                            options: UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             self.backgroundView.alpha = 1.0;

                             self.view.frame = CGRectMake(0, screenRect.size.height - viewHeight, screenRect.size.width, viewHeight);
                         }
                         completion:^(BOOL _finished) {
        }];
    }
}

好吧,为了清楚起见,您最好提供一些屏幕截图。
对于所有其他人:

  1. 可能,您的背景视图只是黑色,导致黑屏。或者它甚至是 [UIColor clearColor]

  2. 最好不要使用 childViewController,它会破坏 MVC

  3. 最好不要直接在动画里面改帧

  4. 如果你想用动画呈现另一个控制器,请在你的对象中使用这个 UIViewControllerTransitioningDelegate 和这个 UIViewControllerAnimatedTransitioning,所以 不要重新发明转换 。参考这个custom controller transition tutorial

希望对您有所帮助

编辑: [UIColor clearColor] 完全去除颜色,这意味着您将完全没有颜色。

现在对您来说最好的解决方案是重写这些控制器,将它们分开,摆脱 viewControllers 的容器,将动画更改为自定义,这样问题就会像魔法一样消失。如果您解决了问题,请不要忘记将问题标记为已解决