advances in uikit animations and transitions · agenda review discussion of uiviewpropertyanimator...

209
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. App Frameworks #WWDC16 Session 216 Advances in UIKit Animations and Transitions Bruce Nilo UIKit Michael Turner UIKit

Upload: others

Post on 06-Oct-2020

7 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

App Frameworks #WWDC16

Session 216

Advances in UIKit Animations and Transitions

Bruce Nilo UIKitMichael Turner UIKit

Page 2: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation
Page 3: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

ResponsiveFluid

NaturalSmooth

Page 4: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

Page 5: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

Review

Page 6: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimator

Page 7: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimatorUIViewControllerAnimated Transitioning

Page 8: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimatorUIViewControllerAnimated TransitioningDemo of a New Photos Sample Application

Page 9: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimatorUIViewControllerAnimated TransitioningDemo of a New Photos Sample ApplicationAnimation to Gesture Revisited

Page 10: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimatorUIViewControllerAnimated TransitioningDemo of a New Photos Sample ApplicationAnimation to Gesture RevisitedInterruptible Keyframe Animations

Page 11: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Implicit property animationsUIKit Animations

Page 12: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Interpolation and Pacing

Page 13: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

2.0 s0 s 1.0 s

x 0 800

Page 14: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

2.0 s0 s 1.0 s

x 0 200 400 600 800

Page 15: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

2.0 s0 s 1.0 s

x 0 200 400 600 800

Page 16: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

2.0 s0 s 1.0 s

x 0 200 400 600 800

UIView.animate(withDuration:2.0,

delay: 0.0,

options:[.linear]) {

circle.center.x = 800.0

}

Page 17: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

0

200

400

600

800

0 .5 1 1.5 2.0

50%

100%

0 100%Normalized Time

s(t)

|x - x0|

|xT - x0|

Normalized Value (μ)

Page 18: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%Normalized Times(t)

x 0 200 400 600 800

Normalized Value μ(s)

Page 19: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%Normalized Times(t)

x 0 200 400 600 800

Normalized Value μ(s)

Page 20: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%Normalized Times(t)

x 0 200 400 600 800

Normalized Value μ(s)

Page 21: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%Normalized Times(t)

x 0 200 400 600 800

Normalized Value μ(s)

Page 22: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%Normalized Times(t)

x 0 200 400 600 800

Normalized Value μ(s)

Page 23: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation
Page 24: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.easeInOut

Page 25: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.easeInOut

Page 26: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.easeIn.easeInOut

Page 27: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.easeIn.easeInOut

Page 28: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.easeIn .easeOut.easeInOut

Page 29: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

2.0 s0 s 1.0 s

x 0 200 400 600 800

UIView.animate(withDuration:2.0,

delay: 0.0,

usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0,

options:[.linear]) {

circle.center.x = 800.0

}

Page 30: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

2.0 s0 s 1.0 s

x 0 200 400 600 800

UIView.animate(withDuration:2.0,

delay: 0.0,

usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0,

options:[.linear]) {

circle.center.x = 800.0

}

Page 31: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 32: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 33: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Adding to Running Animations

Page 34: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Building Interruptible and Responsive Interactions WWDC 2014

Page 35: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Building Interruptible and Responsive Interactions WWDC 2014

Page 36: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Building Interruptible and Responsive Interactions WWDC 2014

Page 37: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

From Model

Building Interruptible and Responsive Interactions WWDC 2014

Page 38: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

From Model From Current

Building Interruptible and Responsive Interactions WWDC 2014

Page 39: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

From Model From Current

Building Interruptible and Responsive Interactions WWDC 2014

Page 40: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

From Model From Current Additively

Building Interruptible and Responsive Interactions WWDC 2014

Page 41: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

From Model From Current Additively

Building Interruptible and Responsive Interactions WWDC 2014

Page 42: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimatorNew Property Animation APIs

Page 43: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

FeaturesUIViewPropertyAnimator

FamiliarInterruptibleScrubbableReversibleBroad availability of timing functionsRunning animations can be modified

NEW

Page 44: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

Page 45: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

Page 46: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

Page 47: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

Page 48: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

Page 49: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

Page 50: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

.inactive.active

.stopped

Page 51: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

.end.start

.current

Page 52: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

Page 53: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

Page 54: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

Page 55: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

Page 56: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

Page 57: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEWUIViewAnimating

var state: UIViewAnimatingState { get } var isRunning: Bool { get } var isReversed: Bool { get set } var fractionComplete: CGFloat { get set }

func startAnimation() func startAnimation(afterDelay : TimInterval)

func pauseAnimation()

func stopAnimation(_ withoutFinishing: Bool) func finishAnimation(at finalPosition: UIViewAnimatingPosition)

Page 58: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

Page 59: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

UIViewImplicitlyAnimating

optional func addAnimations(_ animation: () -> Void, delayFactor: CGFloat) optional func addAnimations(_ animation: () -> Void)

optional func addCompletion(_ completion: (UIViewAnimatingPosition) -> Void)

optional func continueAnimation(withTimingParameters parameters: UITimingCurveProvider?, durationFactor: CGFloat)

Page 60: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

Page 61: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewPropertyAnimator

UIViewImplicitlyAnimating

UIViewAnimating

UITimingCurveProvider

UICubicTimingParameters UISpringTimingParameters

UIViewAnimatingState

UIViewAnimatingPosition

NEW

UIViewPropertyAnimator

var timingParameters: UITimingCurveProvider? { get } var duration: TimeInterval { get } var delay: TimeInterval { get } var isUserInteractionEnabled: Bool { get set } var isManualHitTestingEnabled: Bool { get set } var isInterruptible: Bool { get set }

init(duration: TimeInterval, timingParameters parameters: UITimingCurveProvider)

class func runningPropertyAnimator(withDuration duration: TimeInterval, delay: TimeInterval, options: UIViewAnimationOptions = [], animations: (() -> Void)?, completion: ((UIViewAnimatingPosition) -> Void)? = nil) -> Self

Page 62: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

API discussionUIViewPropertyAnimator

Page 63: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

API discussionUIViewPropertyAnimator

Basic usage

Page 64: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

API discussionUIViewPropertyAnimator

Basic usagePausing and scrubbing

Page 65: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

API discussionUIViewPropertyAnimator

Basic usagePausing and scrubbingReversing

Page 66: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

API discussionUIViewPropertyAnimator

Basic usagePausing and scrubbingReversingTiming providers

Page 67: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 68: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 69: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

BasicsUIViewPropertyAnimator

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration: 2.0, timingParameters:timing)

animator.addAnimations { self.squareView.center = CGPoint(x: 800.0, y: self.squareView.center,y) self.squareView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) }

animator.addCompletion {_ in self.squareView.backgroundColor = UIColor.orange() }

animator.startAnimation()

Page 70: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

BasicsUIViewPropertyAnimator

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration: 2.0, timingParameters:timing)

animator.addAnimations { self.squareView.center = CGPoint(x: 800.0, y: self.squareView.center,y) self.squareView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) }

animator.addCompletion {_ in self.squareView.backgroundColor = UIColor.orange() }

animator.startAnimation()

Page 71: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

BasicsUIViewPropertyAnimator

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration: 2.0, timingParameters:timing)

animator.addAnimations { self.squareView.center = CGPoint(x: 800.0, y: self.squareView.center,y) self.squareView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) }

animator.addCompletion {_ in self.squareView.backgroundColor = UIColor.orange() }

animator.startAnimation()

Page 72: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

BasicsUIViewPropertyAnimator

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration: 2.0, timingParameters:timing)

animator.addAnimations { self.squareView.center = CGPoint(x: 800.0, y: self.squareView.center,y) self.squareView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) }

animator.addCompletion {_ in self.squareView.backgroundColor = UIColor.orange() }

animator.startAnimation()

Page 73: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

BasicsUIViewPropertyAnimator

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration: 2.0, timingParameters:timing)

animator.addAnimations { self.squareView.center = CGPoint(x: 800.0, y: self.squareView.center,y) self.squareView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) }

animator.addCompletion {_ in self.squareView.backgroundColor = UIColor.orange() }

animator.startAnimation()

Page 74: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

BasicsUIViewPropertyAnimator

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration: 2.0, timingParameters:timing)

animator.addAnimations { self.squareView.center = CGPoint(x: 800.0, y: self.squareView.center,y) self.squareView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) }

animator.addCompletion {_ in self.squareView.backgroundColor = UIColor.orange() }

animator.startAnimation()

Page 75: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Observable propertiesUIViewPropertyAnimator

Page 76: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

true false

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.stopped.active.inactive falsetrue

Page 77: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.addAnimation {

circle.center.x = 800.0

}

isRunning isReversedstate.stopped.active.inactive falsetruefalsetrue

Page 78: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.startAnimation ()

isRunning isReversedstate.stopped.active.inactive falsetrue falsetrue

Page 79: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.startAnimation ()

isRunning isReversedstate.stopped.active.inactive falsetrue falsetrue

Page 80: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.stopped.active.inactive

Page 81: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.stopped.active.inactive

Page 82: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.pauseAnimation ()

isRunning isReversedstate.stopped.active.inactive

Page 83: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.pauseAnimation ()

isRunning isReversedstate.stopped

animator.isReversed = true

.active.inactive

Page 84: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.pauseAnimation ()

isRunning isReversedstate.stopped

animator.isReversed = true

.active.inactive

animator.startAnimation ()

falsetrue

Page 85: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetruetrue falsefalsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.stopped

animator.isReversed = false

.inactive .active.active

Page 86: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetruetrue falsefalsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.stopped

animator.isReversed = false

.inactive .active.active

Page 87: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

falsetrue falsetruetrue falsefalsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.stopped

animator.isReversed = false

.inactive

completion(.end)

.inactive .active

Page 88: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.active.inactive

Page 89: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.active.inactive

Page 90: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped.stopped falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.stopAnimation (false)

isRunning isReversedstate.inactive

Page 91: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped.stopped falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.stopAnimation (false)

isRunning isReversedstate.inactive

animator.finishAnimation (.current)

Page 92: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.stopAnimation (false)

isRunning isReversedstate.inactive

animator.finishAnimation (.current)

.inactive falsefalse

completion(.current)

Page 93: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

isRunning isReversedstate.active.inactive

Page 94: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped.stopped falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.stopAnimation (false)

isRunning isReversedstate.inactive

Page 95: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped.stopped falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.stopAnimation (false)

isRunning isReversedstate.inactive

animator.finishAnimation (.end)

Page 96: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

.active .stopped falsetrue falsetrue falsetrue

t 2.0 s0 s .5 s 1.0 s 1.5 s

x 0 200 400 600 800

animator.stopAnimation (false)

isRunning isReversedstate.inactive

animator.finishAnimation (.end)

.inactive falsefalse

completion(.end)

Page 97: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

Page 98: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 99: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 100: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

switch animator.state { case .active:

if animator.isRunning {

progressAnimator.pauseAnimation();

animator.pauseAnimation();

}

else {

animator.startAnimation()

progressAnimator.startAnimation()

}

default:

break

}

}

Page 101: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

switch animator.state { case .active:

if animator.isRunning {

progressAnimator.pauseAnimation();

animator.pauseAnimation();

}

else {

animator.startAnimation()

progressAnimator.startAnimation()

}

default:

break

}

}

Page 102: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

switch animator.state { case .active:

if animator.isRunning {

progressAnimator.pauseAnimation();

animator.pauseAnimation();

}

else {

animator.startAnimation()

progressAnimator.startAnimation()

}

default:

break

}

}

Page 103: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

func handleProgress (_ gr : UIPanGestureRecognizer) {

let s = gr.location(in: progress)

let f = min(s.x / progress.bounds.size.width, 1.0)

let fraction = max(0.0, f)

animator.fractionComplete = fraction

progressAnimator.fractionComplete = fraction

}

Page 104: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

func handleProgress (_ gr : UIPanGestureRecognizer) {

let s = gr.location(in: progress)

let f = min(s.x / progress.bounds.size.width, 1.0)

let fraction = max(0.0, f)

animator.fractionComplete = fraction

progressAnimator.fractionComplete = fraction

}

Page 105: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pausing and scrubbingUIViewPropertyAnimator

func handleProgress (_ gr : UIPanGestureRecognizer) {

let s = gr.location(in: progress)

let f = min(s.x / progress.bounds.size.width, 1.0)

let fraction = max(0.0, f)

animator.fractionComplete = fraction

progressAnimator.fractionComplete = fraction

}

Page 106: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 107: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 108: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 109: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 110: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 111: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 112: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 113: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 114: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 115: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 116: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 117: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

100%

50%

0 100%

s(t)

x 0 200 400 600 800

μ(s)

Page 118: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 119: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 120: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

ReversingUIViewPropertyAnimator

Page 121: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pause and Reverse

Page 122: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Pause and Reverse

animator.pauseAnimation()

animator.isReversed = true

animator.startAnimation()

Page 123: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Running Reverse

Page 124: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Running Reverse

animator.isReversed = true

Page 125: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Animate Back

Page 126: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Animate Back

animator.addAnimations { view.center.x = 150.0 view.transform = CGAffineTransform.identity}

Page 127: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Timing providersUIViewPropertyAnimator

Page 128: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UICubicTimingParameters

NEW

Page 129: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Timing providersUIViewPropertyAnimator

UICubicTimingParameters()

UICubicTimingParameters(animationCurve: .linear)

UICubicTimingParameters(controlPoint1: CGPoint(x:0.0, y:1.0),

controlPoint2: CGPoint(x:1.0,y:0.0))

NEW

Page 130: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Timing providersUIViewPropertyAnimator

UICubicTimingParameters()

UICubicTimingParameters(animationCurve: .linear)

UICubicTimingParameters(controlPoint1: CGPoint(x:0.0, y:1.0),

controlPoint2: CGPoint(x:1.0,y:0.0))

NEW

Page 131: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Timing providersUIViewPropertyAnimator

UICubicTimingParameters()

UICubicTimingParameters(animationCurve: .linear)

UICubicTimingParameters(controlPoint1: CGPoint(x:0.0, y:1.0),

controlPoint2: CGPoint(x:1.0,y:0.0))

NEW

Page 132: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Timing providersUIViewPropertyAnimator

UICubicTimingParameters()

UICubicTimingParameters(animationCurve: .linear)

UICubicTimingParameters(controlPoint1: CGPoint(x:0.0, y:1.0),

controlPoint2: CGPoint(x:1.0,y:0.0))

NEW

Page 133: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UICubicTimingParameters(controlPoint1: CGPoint(x:0.0, y:1.0), controlPoint2: CGPoint(x:1.0,y:0.0))

Timing providersUIViewPropertyAnimator NEW

Page 134: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UISpringTimingParameters

NEW

Page 135: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

Timing providersUIViewPropertyAnimator

UISpringTimingParameters()

UISpringTimingParameters(dampingRatio: 0.8,

initialVelocity: CGVector(dx:1.0, dy: 0.0))

UISpringTimingParameters(mass: CGFloat, stiffness: CGFloat,

damping: CGFloat, initialVelocity velocity: CGVector)

Page 136: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

Timing providersUIViewPropertyAnimator

UISpringTimingParameters()

UISpringTimingParameters(dampingRatio: 0.8,

initialVelocity: CGVector(dx:1.0, dy: 0.0))

UISpringTimingParameters(mass: CGFloat, stiffness: CGFloat,

damping: CGFloat, initialVelocity velocity: CGVector)

Page 137: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

Timing providersUIViewPropertyAnimator

UISpringTimingParameters()

UISpringTimingParameters(dampingRatio: 0.8,

initialVelocity: CGVector(dx:1.0, dy: 0.0))

UISpringTimingParameters(mass: CGFloat, stiffness: CGFloat,

damping: CGFloat, initialVelocity velocity: CGVector)

Page 138: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

NEW

Timing providersUIViewPropertyAnimator

UISpringTimingParameters()

UISpringTimingParameters(dampingRatio: 0.8,

initialVelocity: CGVector(dx:1.0, dy: 0.0))

UISpringTimingParameters(mass: CGFloat, stiffness: CGFloat,

damping: CGFloat, initialVelocity velocity: CGVector)

Page 139: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 140: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 141: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 142: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 143: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Creating interruptible transitionsCustom View Controller Transitions

Page 144: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

Custom Transitions Using View Controllers WWDC 2013

Page 145: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

UIViewControllerInteractiveTransitioningUIViewControllerAnimated Transitioning

Custom Transitions Using View Controllers WWDC 2013

Page 146: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

UIViewControllerInteractiveTransitioningUIViewControllerAnimated TransitioningUIViewControllerContextTransitioning

Custom Transitions Using View Controllers WWDC 2013

Page 147: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

Custom Transitions Using View Controllers WWDC 2013

Page 148: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

Custom Transitions Using View Controllers WWDC 2013

Page 149: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

Custom Transitions Using View Controllers WWDC 2013

Page 150: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

Custom Transitions Using View Controllers WWDC 2013

Page 151: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerAnimatedTransitioning

Delegate

UIViewControllerTransitioningDelegate

UIViewController

Page 152: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerAnimatedTransitioning

UIViewControllerAnimatedTransitioning

Delegate

UIViewControllerTransitioningDelegate

UIViewController

Page 153: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerAnimatedTransitioning

UIViewControllerAnimatedTransitioning

UIViewControllerContextTransitioning

Delegate

UIViewControllerTransitioningDelegate

UIViewController

animateTransition(using: context)

Page 154: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerAnimatedTransitioning

Delegate

UIViewControllerTransitioningDelegate

UIViewController

UIViewControllerContextTransitioning

UIViewControllerAnimatedTransitioning NEW

UIViewImplicitlyAnimating interruptibleAnimator(using: context)

animateTransition(using: context)

Page 155: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerAnimatedTransitioning

Delegate

UIViewControllerTransitioningDelegate

UIViewController

UIViewControllerContextTransitioning

UIViewControllerAnimatedTransitioning NEW

UIViewImplicitlyAnimating interruptibleAnimator(using: context)

animateTransition(using: context)

Page 156: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerAnimatedTransitioning

Delegate

UIViewControllerTransitioningDelegate

UIViewController

UIViewControllerContextTransitioning

UIViewControllerAnimatedTransitioning NEW

UIViewImplicitlyAnimating interruptibleAnimator(using: context)

animateTransition(using: context)

func animateTransition(using context:UIViewControllerTransitioningContext) -> Void {

self.interruptibleAnimator(using: context).startTransition()

}

Page 157: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerInteractiveTransitioning

UIViewControllerAnimatedTransitioningDelegate

UIViewControllerInteractiveTransitioning

Page 158: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerInteractiveTransitioning

UIViewControllerAnimatedTransitioningDelegate

UIViewControllerContextTransitioning

UIViewControllerInteractiveTransitioning

startInteractiveTransition(using: context)

Page 159: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerInteractiveTransitioning

UIViewControllerAnimatedTransitioningDelegate

UIViewControllerContextTransitioning

UIViewControllerInteractiveTransitioning

startInteractiveTransition(using: context)

UIPercentDrivenInteractiveTransition

Page 160: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerInteractiveTransitioning

UIViewControllerAnimatedTransitioningDelegate

UIViewControllerContextTransitioning

UIViewControllerInteractiveTransitioning

UIPercentDrivenInteractiveTransition

startInteractiveTransition(using: context)

Page 161: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerInteractiveTransitioning

UIViewControllerAnimatedTransitioningDelegate

UIViewControllerContextTransitioning

UIViewControllerInteractiveTransitioning

UIPercentDrivenInteractiveTransition

UIViewImplicitlyAnimation

interruptibleAnimator(using: context)

startInteractiveTransition(using: context)

Page 162: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

func interruptibleAnimator(using context:

UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating {

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration:self.duration, timingParameters:timing)

animator.addAnimations {

self.myAnimateTransition(context)

}

return animator

}

Migrating

Page 163: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions

func interruptibleAnimator(using context:

UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating {

let timing = UICubicTimingParameters(animationCurve: .easeInOut)

let animator = UIViewPropertyAnimator(duration:self.duration, timingParameters:timing)

animator.addAnimations {

self.myAnimateTransition(context)

}

return animator

}

Migrating

Page 164: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerContextTransitioningView Controller Transitions

public protocol UIViewControllerContextTransitioning : NSObjectProtocol { ... // This should be called if the transition animation is interruptible and it // is being paused. @available(iOS 10.0, *) public func pauseInteractiveTransition()

// The next two values can change if the animating transition is interruptible. public var isInteractive : Bool { get }// This indicates whether the transition is currently interactive. public var transitionWasCancelled : Bool { get }

public func updateInteractiveTransition(_ percentComplete: CGFloat) public func finishInteractiveTransition() public func cancelInteractiveTransition() ... }

NEW

Page 165: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerContextTransitioningView Controller Transitions

public protocol UIViewControllerContextTransitioning : NSObjectProtocol { ... // This should be called if the transition animation is interruptible and it // is being paused. @available(iOS 10.0, *) public func pauseInteractiveTransition()

// The next two values can change if the animating transition is interruptible. public var isInteractive : Bool { get }// This indicates whether the transition is currently interactive. public var transitionWasCancelled : Bool { get }

public func updateInteractiveTransition(_ percentComplete: CGFloat) public func finishInteractiveTransition() public func cancelInteractiveTransition() ... }

NEW

Page 166: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIViewControllerContextTransitioningView Controller Transitions

public protocol UIViewControllerContextTransitioning : NSObjectProtocol { ... // This should be called if the transition animation is interruptible and it // is being paused. @available(iOS 10.0, *) public func pauseInteractiveTransition()

// The next two values can change if the animating transition is interruptible. public var isInteractive : Bool { get }// This indicates whether the transition is currently interactive. public var transitionWasCancelled : Bool { get }

public func updateInteractiveTransition(_ percentComplete: CGFloat) public func finishInteractiveTransition() public func cancelInteractiveTransition() ... }

NEW

Page 167: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

View Controller Transitions NEW

public protocol UIViewControllerInteractiveTransitioning : NSObjectProtocol { optional public var wantsInteractiveStart : Bool { get }

}

UIViewControllerInteractiveTransitioning

Page 168: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

UIPercentDrivenInteractiveTransitionView Controller Transitions

public class UIPercentDrivenInteractiveTransition : NSObject, UIViewControllerInteractiveTransitioning {

public var timingCurve: UITimingCurveProvider?

public var wantsInteractiveStart: Bool

public func pause()

}

NEW

Page 169: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

RulesView Controller Transitions

Page 170: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Implementation of interruptibleAnimator(using: context) implies adoption

RulesView Controller Transitions

Page 171: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Implementation of interruptibleAnimator(using: context) implies adoptionanimateTransition(using: context) or startInteractiveTransition(using: context) are called first

RulesView Controller Transitions

Page 172: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Implementation of interruptibleAnimator(using: context) implies adoptionanimateTransition(using: context) or startInteractiveTransition(using: context) are called firstinterruptibleAnimator(using: context) returns the same instance

RulesView Controller Transitions

Page 173: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Implementation of interruptibleAnimator(using: context) implies adoptionanimateTransition(using: context) or startInteractiveTransition(using: context) are called firstinterruptibleAnimator(using: context) returns the same instanceThe animator survives the life of the transition

RulesView Controller Transitions

Page 174: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

DemoAn improved sample Photos app

Michael Turner UIKit

Page 175: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Two More Topics

Page 176: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimatorUIViewControllerAnimated TransitioningDemo of a New Photos Sample ApplicationAnimation to Gesture Revisited (Hit Testing)Interruptible Keyframe Animations

Page 177: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Agenda

ReviewDiscussion of UIViewPropertyAnimatorUIViewControllerAnimated TransitioningDemo of a New Photos Sample ApplicationAnimation to Gesture Revisited (Hit Testing)Interruptible Keyframe Animations

Page 178: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

var isUserInteractionEnabled: Bool

var isManualHitTestingEnabled: Bool

Page 179: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

var isUserInteractionEnabled: Bool

var isManualHitTestingEnabled: Bool

Defaults to true

Page 180: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

var isUserInteractionEnabled: Bool

var isManualHitTestingEnabled: Bool

Defaults to true

Defaults to false

Page 181: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testing moving viewsUIViewPropertyAnimator

animator.isManualHitTestingEnabled = true animator.isManualHitTestingEnabled = true

Building Interruptible and Responsive Interactions WWDC 2014

Page 182: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testing moving viewsUIViewPropertyAnimator

animator.isManualHitTestingEnabled = true animator.isManualHitTestingEnabled = true

Building Interruptible and Responsive Interactions WWDC 2014

Page 183: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testing moving viewsUIViewPropertyAnimator

animator.isManualHitTestingEnabled = true animator.isManualHitTestingEnabled = true

Building Interruptible and Responsive Interactions WWDC 2014

Page 184: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

animator.isManualHitTestingEnabled = true

Building Interruptible and Responsive Interactions WWDC 2014

Page 185: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

animator.isManualHitTestingEnabled = true

Building Interruptible and Responsive Interactions WWDC 2014

override func hitTest(_ point: CGPoint, with event: UIEvent!) -> UIView? {

let superPoint = self.convert(point, to: superview)

let pt = layer.presentation()?.convert(superPoint, from: superview!.layer)

return super.hitTest(pt!, with: event)

}

Page 186: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

animator.isManualHitTestingEnabled = false

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

Page 187: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

animator.isManualHitTestingEnabled = false

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

Page 188: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

animator.isManualHitTestingEnabled = false

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

Page 189: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

animator.isManualHitTestingEnabled = false

Page 190: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

animator.isManualHitTestingEnabled = false

Page 191: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

animator.isManualHitTestingEnabled = false

Page 192: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Hit testingUIViewPropertyAnimator

Building Interruptible and Responsive Interactions WWDC 2014

animator.isManualHitTestingEnabled = true

Page 193: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Keyframe Animations

Page 194: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 195: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 196: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 197: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

1024 x 768

Page 198: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Keyframe animationsUIViewPropertyAnimator

animator.addAnimations { _ in

UIView.animateKeyframes(withDuration: self.duration, delay: 0.0, options:[.calculationModeCubic]

{_ in

UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25) {

self.squareView1.center = CGPoint(x: 200.0, y: 450.0)

}

UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25) {

self.squareView1.center = CGPoint(x: 500.0, y: 250.0)

}

UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.25) {

self.squareView1.center = CGPoint(x: 800.0, y: 450.0)

}

UIView.addKeyframe(withRelativeStartTime: 0.75, relativeDuration: 0.25) {

self.squareView1.center = CGPoint(x: 850.0, y: 600.0)

}

}

}

Page 199: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

interactivePopGestureRecognizer

Page 200: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

interactivePopGestureRecognizer

let popGesture = navController.interactivePopGestureRecognizer!

Page 201: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

interactivePopGestureRecognizer

let popGesture = navController.interactivePopGestureRecognizer!

myInteractiveGesture.require(toFail: popGesture)

Page 202: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Summary

Page 203: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Summary

Create interruptible animations with a UIViewPropertyAnimator

Page 204: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Summary

Create interruptible animations with a UIViewPropertyAnimatorUIViewPropertyAnimators support a wide new range of pacing options

Page 205: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Summary

Create interruptible animations with a UIViewPropertyAnimatorUIViewPropertyAnimators support a wide new range of pacing optionsUse UIViewPropertyAnimator to create interruptible view controller transitions

Page 206: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

More Information

https://developer.apple.com/wwdc16/216

Page 207: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Related Sessions

What’s New in UICollectionView in iOS10 Presidio Thursday 9:00 AM

A Peek at 3D Touch Presidio Thursday 4:00 PM

Custom Transitions Using View Controllers WWDC 2013

Advanced Techniques with UIKit Dynamics WWDC 2013

Building Interruptible and Responsive Interactions WWDC 2014

What's New in UIKit Dynamics and Visual Effects WWDC 2015

Page 208: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation

Labs

UIKit and UIKit Animations Lab FrameworksLab C Thursday 1:00 PM

Page 209: Advances in UIKit Animations and Transitions · Agenda Review Discussion of UIViewPropertyAnimator UIViewControllerAnimated Transitioning Demo of a New Photos Sample Application Animation