核心动画动画图层水平翻转

San*_*eep 2 core-animation objective-c ios

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

我用的代码如下:

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"];
Run Code Online (Sandbox Code Playgroud)

在代表中我转换到下一个视图.但是,这没有多大意义,动画不像默认动画那样生动.怎么能实现呢?

Dav*_*ist 7

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

您的旋转看起来不像在3D空间中发生,因为您的变换没有透视.m34将变换的值更改为1.0/800.0之类的小值,您应该看到它以透视方式旋转.

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

3D变换的该值(第三列,第四行)控制变换的透视.如果您想了解更多有关它如何工作的信息,您可以在Wikipedia上阅读有关3D投影的更多信息.

如何翻转两个视图,就好像它们是卡片的两侧一样

为了使两个视图看起来像是同一视图的两个边,你应该添加它们旋转背面π度并将doubleSided两个图层的图层属性更改为NO.现在,当他们背对着你时,他们将无法看见.将旋转应用于前后层时,它们将更改可见的图层.注意:将前部旋转到π度,然后将后部旋转到2π,以便完成旋转并面向您.


小智 5

你可以用

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

我发现你希望在同一个超级视图中同时拥有两个视图,否则事情会变得有些混乱.