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)
在代表中我转换到下一个视图.但是,这没有多大意义,动画不像默认动画那样生动.怎么能实现呢?
您的旋转看起来不像在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)
我发现你希望在同一个超级视图中同时拥有两个视图,否则事情会变得有些混乱.
| 归档时间: |
|
| 查看次数: |
9051 次 |
| 最近记录: |