UIAnimation之后UI屏幕变黑

时间:2016-09-26 21:32:25

标签: ios objective-c iphone 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 个答案:

答案 0 :(得分:1)

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

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

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

  3. 最好不要直接在动画中更改框架

  4. 如果您想要另一个带动画的控制器,请在对象中使用此UIViewControllerTransitioningDelegate和此UIViewControllerAnimatedTransitioning,以便不重新发送过渡。请参阅此custom controller transition tutorial
  5. 希望这可以帮到你

    编辑: [UIColor clearColor]完全删除颜色,这意味着你根本就没有颜色。

    现在最好的解决方案是重写那些控制器,彼此拆分,摆脱viewControllers的容器,将动画更改为自定义,而问题将作为魔法消失。如果您解决了问题,请不要忘记将问题标记为已解决,请