回想
答:交互式动画和自定义的timingFunction动画。
无code无本相。我们先来看看起初版本的动画接口是若何实现交互式动画和自定义timingFunciton的。
为什么这两个属性异常重要。这里,我须要给大年夜家介绍一个国外异常风行的app。Principle
若何实现一个交互式动画?
大年夜家知道,iOS琅绫擎动画的实现方法主如果两种,一种是UIViewAnimation和基于Layer层的CAAnimation。
两种动画的差别很多,当然,相符越底层的接口自由度越高的┞封个特点。CAAnimation的可定制性更强,然则在我看来,两种动画最重要的差别用一句话形容,就是.
我们如今,就来实现一个用手势控制的动画。效不雅如图。
我们的目标是应用UISlider控制动画的进度,这个动画就是图片绕Y轴扭转。
代码如下。
- class ViewController: UIViewController {
- let imageView = UIImageView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 100))
- override func viewDidLoad() {
- super.viewDidLoad()
- imageView.image = UIImage.init(named: "wuyanzu.jpg")
- imageView.center = self.view.center
- imageView.layer.transform.m34 = -1.0/500
- self.view.addSubview(imageView)
- let basicAnimation = CABasicAnimation.init(keyPath: "transform.rotation.y")
- basicAnimation.fromValue = 0
- basicAnimation.toValue = CGFloat.pi
- basicAnimation.duration = 1
- imageView.layer.add(basicAnimation, forKey: "rotate")
- imageView.layer.speed = 0
- // Do any additional setup after loading the view, typically from a nib.
- }
- @IBAction func sliderValueChanged(sender:UISlider) {
- imageView.layer.timeOffset = CFTimeInterval(sender.value)
- }
- }
在iOS11之前,可交互动画的道理很简单。过程总结如下。
- 将layer的speed设置为0,如许,动画就处于暂停状况
- 应用timeOffset来控制全部动画的进度
再举个例子,如不雅这个动画不是应用UISlider控制扭转角度,而是应用PanGesture移动的距朗攀来控制呢?
那么这种情况,你须要找到的就是手势的距离和Rotate动画timeOffset的一种接洽关系。
我应用Sketch做了一个简陋的草图来模仿这种情况。
推荐阅读
Python转JavaScript编译器,天了噜!还能转代码,到底怎么做到的
为懂得决这个问题,Transcrpyt支撑别号章一ㄅ念。当在Python中应用<string>.split时,就会被翻译成一个具有Python的split语义的JavaScript函数<string>.py_split。在原生JavaScript代铝闼楝split指代的>>>详细阅读
地址:http://www.17bianji.com/lsqh/38570.html
1/2 1