-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPopTransitionAnimator.swift
More file actions
80 lines (59 loc) · 2.63 KB
/
PopTransitionAnimator.swift
File metadata and controls
80 lines (59 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//
// PopTransitionAnimator.swift
// Interests
//
// Created by lsecrease on 11/7/15.
// Copyright (c) 2015 ImagineME. All rights reserved.
//
import UIKit
class PopTransitionAnimator: NSObject {
var duration = 1.0
private var isPresenting = false
}
extension PopTransitionAnimator : UIViewControllerTransitioningDelegate {
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
isPresenting = true
return self
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
isPresenting = false
return self
}
}
extension PopTransitionAnimator : UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return duration
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
let containerView = transitionContext.containerView()//!
// transforms
let minimize = CGAffineTransformMakeScale(0, 0)
let offScreenDown = CGAffineTransformMakeTranslation(0, containerView!.frame.height)
let shiftDown = CGAffineTransformMakeTranslation(0, 15)
let scaleDown = CGAffineTransformScale(shiftDown, 0.95, 0.95)
toView.transform = minimize
if isPresenting {
containerView!.addSubview(fromView)
containerView!.addSubview(toView)
} else {
containerView!.addSubview(toView)
containerView!.addSubview(fromView)
}
//In Swift 2.0 make options: []
UIView.animateWithDuration(duration, delay: 0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.75, options: [], animations: { () -> Void in
if self.isPresenting {
fromView.transform = scaleDown
fromView.alpha = 0.5
toView.transform = CGAffineTransformIdentity
} else {
fromView.transform = offScreenDown
toView.alpha = 1.0
toView.transform = CGAffineTransformIdentity
}
}) { (finished) -> Void in
transitionContext.completeTransition(true)
}
}
}