深圳iOS应用培训

239人已阅读 2017-12-27 09:29:56
导读 目前插值能够加入的类型极其丰富(并且还有计划要加入更多类型)。在使用时,只要创建插值对象,赋予其起始值与结束值,并将其应用在闭*内的目标视图上即可。之后只需从手势识别器上获取相应的值,再将其提供给插值
计算机IT

新闻详情

2017-12-27 09:29:56

 最近有一个非常棒的演讲“Swift值得一试!”

在其中Adam Bell提出:

在全世界抛弃了拟真设计(skeumorphism)的时候

我们应当拾回iOS应用所丢失的魔力

而我完全同意他的观点

 

 

          iOS的魔力通常体现为交互式的手势动画——每当目睹屏幕上的操作完美回应你的触控时,这种感觉非常奇妙。还记得*次见到惯性滚动(inertial scrolling)效果、旧版Twitter iPad版、以及53公司的Paper软件时我们的反应么?

 

        交互手势动画在使用时还是很费劲的,通常*括很多不同的插值类型,在本文中我打算将其做以简化。

 

插值初接触

 

        插值(Interpolate)是用于创建交互式手势动画的全新Swift插值框架,而关键在于:所有动画归根结底都是插值。移动就是从一个CGPoint到另一个的插值,而色彩变化则是两个UIColor之间的插值,依此类推。

 

       目前插值能够加入的类型极其丰富(并且还有计划要加入更多类型)。在使用时,只要创建插值对象,赋予其起始值与结束值,并将其应用在闭*内的目标视图上即可。之后只需从手势识别器上获取相应的值,再将其提供给插值对象就可以了。

 

 

代码如下:

 

 

// Create interpolation object

let colorChange = Interpolate(from: UIColor.whiteColor(), to: UIColor.redColor(), apply: { [weak self] (color) in

      self?.view.backgroundColor = color

})

 

// For a gesture recognizer or delegate that reports every step of its progress (e.g. UIPanGestureRecognizer or a ScrollViewDidScroll) you can just apply the percentage directly to the Interpolate object

@IBAction func handlePan(recognizer: UIPanGestureRecognizer) {

    let translation = recognizer.translationInView(self.view)

    let translatedCenterY = view.center.y + translation.y

    let progress = translatedCenterY / self.view.bounds.size.height

    colorChange.progress = progress

}

 

// For other types of gesture recognizers that only report a beginning and an end (e.g. a UILongPressGestureRecognizer), you can animate directly to a target progress value with a given duration.

@IBAction func handleLongPress(recognizer: UILongPressGestureRecognizer) {

    switch recognizer.state {

        case .Began:

            colorChange.animate(1.0, duration: 0.3)

        case .Cancelled, .Ended, .Failed:

            colorChange.animate(0.0, duration: 0.3)

        default: break

    }

}

 

// To remove

colorChange.invalidate()

 

 

 

 

 

 

插值不仅可以应用在简单的线性插入上

还能让动画过渡更平滑、效果更丰富

插值支持下列这些函数:

EaseIn、EaseOut、EaseInOut以及Spring

甚至支持自定义插值函数(通过协议)

让我们来尝试更多神奇的应用吧!

上一篇: 深圳ASO优化培训 下一篇: 深圳学习c语言

相关文章

推荐课程

查看全部课程
ITjob(远标教育)

ITjob(远标教育)

龙华校区

查看全部校区 进入官方主页