您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页Animation --来自 :zangqilong. “iO

Animation --来自 :zangqilong. “iO

来源:伴沃教育

1.UIViewAnimation简单易用,但可定制性太低,他的特点便是开弓没有回头箭,我们停不下来。当我们想暂停一个动画时,可以这样做:
speed

一个layer执行动画的速度,那么我们把layer的speed设置为0,动画自然就停止了。所以,speed这个参数是我们暂停动画的关键。

beginTime

动画开始的时间。

timeOffset

动画的偏移时间,有点类似scrollerView的contentOffset。

代码如下:

-(void)pauseLayer:(CALayer*)layer {
   CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
   layer.speed = 0.0;
   layer.timeOffset = pausedTime;
}

摘录来自: zangqilong. “iOS进阶指南”。 iBooks. 

当暂停之后我们需要从暂停处重新启动:则需要拿到暂停时的时间偏移,然后赋值给动画的beginTime。

-(void)resumeLayer:(CALayer*)layer {
   CFTimeInterval pausedTime = [layer timeOffset];
   layer.speed = 1.0;
   layer.timeOffset = 0.0;
   layer.beginTime = 0.0;
   CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
   layer.beginTime = timeSincePause;
}

摘录来自: zangqilong. “iOS进阶指南”。 iBooks. 
2.根据手势或者其他变量来控制动画:

添加动画时,如果我们想手动控制动画的执行,可以在动画添加之前将layer的speed设为0.

3.M34

这里有一个透视投影的概念:
在现实3D生活中,我们之所以能有强烈的立体感,是因为物体离我们的远近会影响他在我们眼中的视图大小,同样的东西在近处看绝对比远处看大,然而在屏幕上各个视图都是等距离的。

在等距投影中,远处的物体和近处的物体保持同样的缩放比例,这种投影也有它自己的用处(例如建筑绘图,颠倒,和伪3D视频),但当前我们并不需要。

为了做一些修正,我们需要引入投影变换(又称作z变换)来对除了旋转之外的变换矩阵做一些修改,Core Animation并没有给我们提供设置透视变换的函数,因此我们需要手动修改矩阵值,幸运的是,很简单:
CATransform3D
的透视效果通过一个矩阵中一个很简单的元素来控制:m34

Paste_Image.png
“struct CATransform3D
{
CGFloat     m11(x缩放),    m12(y切变),      m13(旋转),     m14();

CGFloat     m21(x切变),    m22(y缩放),      m23(),             m24();

CGFloat     m31(旋转),      m32( ),               m33(),               m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。正直/负值都有意义);

CGFloat     m41(x平移),     m42(y平移),     m43(z平移),     m44();
};”

摘录来自: zangqilong. “iOS进阶指南”。 iBooks. 

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务