繁体   English   中英

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

[英]Switching views using Core Animation not working?

目前,我在使用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"];
}

好的,我添加了self,看看上面的新代码。 view2是一个UIViewController,这就是为什么我在它之后执行.view。 该应用程序仅将在iOS 5或更高版本上可用,所以这不是问题。 但是我想要实现的是使用Core Animation切换视图,并让每个UIViewController管理自己的视图。 我只是使用Core Animation而不是通常的方式来切换视图。

如果您希望一次只在屏幕上显示一个根视图(并且通过[UIScreen mainScreen].bounds调用看起来很[UIScreen mainScreen].bounds ),那么建议您在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:方法可能如下所示:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
    [self.view1.view removeFromSuperview];

    [self.view2.view setAlpha:0];
    [[UIApplication sharedApplication].delegate.window addSubview:self.view2.view];

    CABasicAnimation *fadein = [CABasicAnimation animationWithKeyPath:@"opacity"];
    [fadein setToValue:[NSNumber numberWithFloat:1.0]];
    [fadein setDuration:0.5];
    fadein.fillMode = kCAFillModeForwards;
    fadein.removedOnCompletion = NO;
    [[self.view2.view layer] addAnimation:fadein forKey:@"alpha"];
}

您可能需要对其进行处理,以确保一切正常进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM