似乎您必须使用核心动画转换“手动”制作动画。
我将动画分为两部分。首先,我用动画将“viewOne”旋转到一半,在没有动画的情况下将“viewTwo”旋转到另一个方向的一半。
动画的前半部分完成后,我在委托方法中完成其余部分。
您的参数可能会有所不同:)
倾斜是由我找到的其他一些 StackOverflow 答案提供的。
- (IBAction)flip:(id)sender
{
UIView* viewOne = [self.view.subviews objectAtIndex:0];
UIView* viewTwo = [self.view.subviews objectAtIndex:1];
viewOne.hidden = YES;
CATransform3D matrix = CATransform3DMakeRotation (M_PI / 2, 0.0, 1.0, 0.0);
CATransform3D matrix2 = CATransform3DMakeRotation (-M_PI / 2 , 0.0, 1.0, 0.0);
matrix = CATransform3DScale (matrix, 1.0, 0.975, 1.0);
matrix.m34 = 1.0 / -500;
matrix2 = CATransform3DScale (matrix2, 1.0, 0.975, 1.0);
matrix2.m34 = 1.0 / -500;
viewOne.layer.transform = matrix2;
[UIView beginAnimations:@"FlipAnimation1" context:self];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationPartOneDone)];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
viewTwo.layer.transform = matrix;
[UIView commitAnimations];
}
-(void)animationPartOneDone
{
UIView* viewOne = [self.view.subviews objectAtIndex:0];
UIView* viewTwo = [self.view.subviews objectAtIndex:1];
viewOne.hidden = NO;
viewTwo.hidden = YES;
CATransform3D matrix = CATransform3DMakeRotation (2 * M_PI, 0.0, 1.0, 0.0);
matrix = CATransform3DScale (matrix, 1.0, 1.0, 1.0);
[UIView beginAnimations:@"FlipAnimation2" context:self];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
viewOne.layer.transform = matrix;
[UIView commitAnimations];
[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
}