如果您需要在核心动画中执行此操作,则可以通过与替换视图分开制作动画来实现。这并不是不可能的困难。下面是如何执行此操作的说明和一些示例代码:
替换视图
例如可以使用以下命令来替换视图:
[UIView transitionFromView:self.fromView
toView:self.toView
duration:0.0
options:UIViewAnimationOptionTransitionNone
completion:nil];
翻转动画
困难的部分显然是动画(如果你以前从未做过,请将两者放在一起)。
仅显示两个视图的正面
由于您想要翻转两个视图,就好像它们是一张纸的两侧一样,因此您不希望它们中的任何一个在它们背对时出现。这是通过设置来完成的doubleSided
财产给NO
on both层。 (不是双面就是单面)。
进行翻转
您想要将前视图的变换从恒等变换(无变换)设置为围绕 y 轴 180 度旋转变换(面向后)进行动画处理,以便从左向右翻转。
同时你想要动画后视图的变换from-180 度旋转到恒等变换。这将使翻转回来。这两个动画都可以作为“基本”动画来完成:
CABasicAnimation *flipAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
[flipAnimation setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]]; // No rotation
[flipAnimation setToValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0,1,0)]]; // Rotate PI around Y
[flipAnimation setFillMode:kCAFillModeBoth];
[flipAnimation setRemoveOnCompletion:NO];
[flippingView layer] addAnimation:flipAnimation forKey:@"myFlipAnimation"];
然后,您可以为另一个视图执行相同类型的动画。 (填充模式可以防止动画完成后跳回原始状态)
把它们放在一起
由于您希望两个动画同时运行,并且希望视图替换代码在动画完成时运行,因此您可以使用动画事务。这还允许您配置两个动画在一个地方的外观:
[CATransaction begin];
[CATransaction setAnimationDuration:2.0]; // 2 seconds
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
// Your view replacing code here...
}];
// Add the animations to both views here...
[CATransaction commit];