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) {
}];
}
}
好吧,为了清楚起见,您最好提供一些屏幕截图。
对于所有其他人:
可能,您的背景视图只是黑色,导致黑屏。或者它甚至是 [UIColor clearColor]
最好不要使用 childViewController,它会破坏 MVC
最好不要直接在动画里面改帧
- 如果你想用动画呈现另一个控制器,请在你的对象中使用这个
UIViewControllerTransitioningDelegate
和这个 UIViewControllerAnimatedTransitioning
,所以 不要重新发明转换 。参考这个custom controller transition tutorial
希望对您有所帮助
编辑:
[UIColor clearColor]
完全去除颜色,这意味着您将完全没有颜色。
现在对您来说最好的解决方案是重写这些控制器,将它们分开,摆脱 viewControllers 的容器,将动画更改为自定义,这样问题就会像魔法一样消失。如果您解决了问题,请不要忘记将问题标记为已解决
我的问题是... 我有父视图控制器的对象,我想为第二个视图控制器设置动画。 所以我在 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) {
}];
}
}
好吧,为了清楚起见,您最好提供一些屏幕截图。
对于所有其他人:
可能,您的背景视图只是黑色,导致黑屏。或者它甚至是
[UIColor clearColor]
最好不要使用 childViewController,它会破坏 MVC
最好不要直接在动画里面改帧
- 如果你想用动画呈现另一个控制器,请在你的对象中使用这个
UIViewControllerTransitioningDelegate
和这个UIViewControllerAnimatedTransitioning
,所以 不要重新发明转换 。参考这个custom controller transition tutorial
希望对您有所帮助
编辑:
[UIColor clearColor]
完全去除颜色,这意味着您将完全没有颜色。
现在对您来说最好的解决方案是重写这些控制器,将它们分开,摆脱 viewControllers 的容器,将动画更改为自定义,这样问题就会像魔法一样消失。如果您解决了问题,请不要忘记将问题标记为已解决