使用Core Animation切换视图不起作用?

时间:2011-10-16 00:09:54

标签: iphone ios core-animation

目前我在使用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而不是通常的方式切换视图。

1 个答案:

答案 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:

你可能需要稍微捣乱一下,以确保一切正常射击。