我的问题是...... 我有父视图控制器的对象,我想动画第二个视图控制器。 所以我在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) {
}];
}
}
答案 0 :(得分:1)
嗯,为了清楚起见,您最好提供一些屏幕截图。
对于所有其他人:
可能您的背景视图只是黑色,导致黑屏。或者它甚至是[UIColor clearColor]
最好不要使用 childViewController,它会破坏MVC
最好不要直接在动画中更改框架
UIViewControllerTransitioningDelegate
和此UIViewControllerAnimatedTransitioning
,以便不重新发送过渡。请参阅此custom controller transition tutorial 希望这可以帮到你
编辑:
[UIColor clearColor]
完全删除颜色,这意味着你根本就没有颜色。
现在最好的解决方案是重写那些控制器,彼此拆分,摆脱viewControllers的容器,将动画更改为自定义,而问题将作为魔法消失。如果您解决了问题,请不要忘记将问题标记为已解决,请