核心animation使图层水平翻转

我有两个视图,我想在两个视图之间切换使用核心animation,animation每个视图的图层。 我想要的animation就像UIViewAnimationOptionTransitionFlipFromLeft提供的animation,但我无法做到这一点。 我可以使图层旋转180度,然后在animation停止时转换到下一个视图。 如何才能做到这一点?

我使用的代码如下:

 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"]; self.view.layer.zPosition = 100; CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); [animation setToValue:[NSValue valueWithCATransform3D:transform]]; [animation setDuration:.5]; [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; [animation setFillMode:kCAFillModeForwards]; [animation setRemovedOnCompletion:YES]; [animation setDelegate:self]; [self.view.layer addAnimation:animation forKey:@"test"]; 

在代表我转移到下一个视图。 但是,这并没有什么意义,animation也不像默认的animation那样生动。 这怎么能实现?

如何使它看起来像一个3D旋转

您的旋转看起来不像是在3D空间中发生的,因为您的变换没有透视。 将转换的m34值更改为像1.0 / 800.0这样的小东西,你应该看到它旋转的angular度。

 CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); transform.m34 = 1.0/800.0; [animation setToValue:[NSValue valueWithCATransform3D:transform]]; 

3D变换的值(第三列,第四行)控制变换的视angular。 如果你想了解更多关于它如何工作,你可以阅读更多关于维基百科的3D投影 。

如何翻转两个视图,就好像它们在一张牌的两面

为了让它看起来像两个视图是同一视图的两面,你应该添加它们旋转背面π度,并将图层的doubleSided属性改为NO。 现在,当你离开你的时候,他们将不可见。 当您将旋转应用于正面和背面层时,它们将更改可见的图层。 注意:将前部旋转到π度,将后部旋转到2π,使其完成旋转并面向您。

你可以使用

  [UIView transitionFromView:aView toView:bView duration:0.3 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) { } ]; 

我发现你想要在同一个超级视图中看到两个视图,否则事情会变得有点混乱。