目前我在使用Core Animation切换视图时出现问题。我希望通过黑色切换淡入我的下一个视图。 现在它除了从原始视图中丢失触摸事件之外什么都不做。 我在下面的代码中做错了什么?
Edit1代码:
- (void)changeView1ToView2 {
CABasicAnimation *fadeout= [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadeout setDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];
[fadeout setToValue:[NSNumber numberWithFloat:0]];
[fadeout setDuration:0.5];
[[self.view layer] addAnimation:fadeout forKey:@"alpha"];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
[self.view addSubview:self.view2.view];
self.view2.view.frame = [UIScreen mainScreen].bounds;
[self.view2.view setAlpha:0];
CABasicAnimation *fadein = [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadein setToValue:[NSNumber numberWithFloat:1.0]];
[fadein setDuration:0.5];
[[self.view2.view layer] addAnimation:fadein forKey:@"alpha"];
}
好的,我添加了自己,看看我上面的新代码。 view2是一个UIViewController,这就是我为什么在它之后做的.view。该应用程序仅在iOS 5或更高版本上可用,所以这不是问题。但我想要实现的是使用Core Animation切换视图,并让每个UIViewController管理自己的视图。我只是使用Core Animation而不是通常的方式切换视图。
答案 0 :(得分:1)
如果您希望一次只在屏幕上显示一个根视图(并且通过该[UIScreen mainScreen].bounds
调用的外观,那么),那么我建议在{{更换视图1}}级别。没有动画,这看起来像这样:
UIWindow
就未看到实际交换的视图而言,您需要确保动画保留您在动画期间所做的更改。具体来说,您需要设置以下内容:
// Assuming UIViewControllers called view1 and view2 as members of some
// (non-UIViewController) controller class (self, in this case)
//and that view1.view is in the application's window's subviews collection
[self.view1.view removeFromSuperview];
[[UIApplication sharedApplication].delegate.window addSubview:self.view2.view];
然后可以调整您的方法以将所有这些考虑在内。例如,您的myAnimation.fillMode = kCAFillModeForwards;
myAnimation.removedOnCompletion = NO;
方法可能如下所示:
animationDidStop:finished:
你可能需要稍微捣乱一下,以确保一切正常射击。