Skip to content

Commit 062da5c

Browse files
committed
交互式动画功能实现
1 parent c6234c5 commit 062da5c

File tree

3 files changed

+34
-20
lines changed

3 files changed

+34
-20
lines changed

CustomTransition/CustomTransition-Swift/CustomTransition-Swift.xcodeproj/project.pbxproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@
109109
isa = PBXGroup;
110110
children = (
111111
9B5075091C68D94400C89416 /* InteractivityFirstViewController.swift */,
112+
9B50750B1C68D95600C89416 /* InteractivitySecondViewController.swift */,
112113
9B50750D1C68EC1D00C89416 /* InteractivityTransitionDelegate.swift */,
113114
9B50750F1C68EC8C00C89416 /* InteractivityTransitionAnimator.swift */,
114115
9B5075111C68F08C00C89416 /* TransitionInteractionController.swift */,
115-
9B50750B1C68D95600C89416 /* InteractivitySecondViewController.swift */,
116116
);
117117
name = Interactivity;
118118
path = "CustomTransition-Swift/Interactivity";

CustomTransition/CustomTransition-Swift/CustomTransition-Swift/Interactivity/InteractivityFirstViewController.swift

+16-10
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import UIKit
1111
class InteractivityFirstViewController: UIViewController {
1212
lazy var interactivitySecondViewController: InteractivitySecondViewController = InteractivitySecondViewController()
1313
lazy var customTransitionDelegate: InteractivityTransitionDelegate = InteractivityTransitionDelegate()
14+
lazy var interactiveTransitionRecognizer: UIScreenEdgePanGestureRecognizer = UIScreenEdgePanGestureRecognizer.init(target: self, action: Selector("interactiveTransitionRecognizerAction:"))
15+
1416
override func viewDidLoad() {
1517
super.viewDidLoad()
1618
view.backgroundColor = [224, 222, 255].color // 设置背景颜色
@@ -32,19 +34,12 @@ class InteractivityFirstViewController: UIViewController {
3234
button.frame.origin.y = view.frame.maxY - 100
3335
button.setTitleColor(UIColor.blueColor(), forState: .Normal)
3436
button.setTitle("演示动画", forState: .Normal)
35-
button.addTarget(self, action: Selector("animationButtonDidClicked"), forControlEvents: .TouchUpInside)
37+
button.addTarget(self, action: Selector("animationButtonDidClicked:"), forControlEvents: .TouchUpInside)
3638
view.addSubview(button)
3739

3840
/// 添加滑动交互手势
39-
let interactiveTransitionRecognizer = UIScreenEdgePanGestureRecognizer.init(target: self, action: Selector("interactiveTransitionRecognizerAction:"))
4041
interactiveTransitionRecognizer.edges = .Right;
4142
self.view.addGestureRecognizer(interactiveTransitionRecognizer)
42-
43-
/// 设置动画代理
44-
customTransitionDelegate.gestureRecognizer = interactiveTransitionRecognizer
45-
interactivitySecondViewController.transitioningDelegate = customTransitionDelegate
46-
interactivitySecondViewController.modalPresentationStyle = .FullScreen
47-
4843
}
4944

5045
override func didReceiveMemoryWarning() {
@@ -56,14 +51,25 @@ class InteractivityFirstViewController: UIViewController {
5651
extension InteractivityFirstViewController {
5752
func interactiveTransitionRecognizerAction(sender: UIScreenEdgePanGestureRecognizer) {
5853
if sender.state == .Began {
59-
54+
customTransitionDelegate.gestureRecognizer = interactiveTransitionRecognizer
55+
self.animationButtonDidClicked(sender)
6056
}
6157
}
6258
}
6359

6460
extension InteractivityFirstViewController {
65-
func animationButtonDidClicked() {
61+
func animationButtonDidClicked(sender: AnyObject) {
62+
/// 设置动画代理
63+
if sender.isKindOfClass(UIGestureRecognizer) {
64+
customTransitionDelegate.gestureRecognizer = interactiveTransitionRecognizer
65+
}
66+
else {
67+
customTransitionDelegate.gestureRecognizer = nil
68+
}
6669
customTransitionDelegate.targetEdge = .Right
70+
interactivitySecondViewController.transitioningDelegate = customTransitionDelegate
71+
interactivitySecondViewController.modalPresentationStyle = .FullScreen
72+
6773
self.presentViewController(interactivitySecondViewController, animated: true, completion: nil)
6874
}
6975

CustomTransition/CustomTransition-Swift/CustomTransition-Swift/Interactivity/InteractivitySecondViewController.swift

+17-9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import UIKit
1010

1111
class InteractivitySecondViewController: UIViewController {
12+
lazy var interactiveTransitionRecognizer: UIScreenEdgePanGestureRecognizer = UIScreenEdgePanGestureRecognizer.init(target: self, action: Selector("interactiveTransitionRecognizerAction:"))
1213

1314
override func viewDidLoad() {
1415
super.viewDidLoad()
@@ -28,33 +29,40 @@ class InteractivitySecondViewController: UIViewController {
2829
button.frame.origin.y = view.frame.maxY - 100
2930
button.setTitleColor(UIColor.blueColor(), forState: .Normal)
3031
button.setTitle("Dismiss", forState: .Normal)
31-
button.addTarget(self, action: Selector("buttonDidClicked"), forControlEvents: .TouchUpInside)
32+
button.addTarget(self, action: Selector("animationButtonDidClicked:"), forControlEvents: .TouchUpInside)
3233
view.addSubview(button)
3334

3435
/// 添加滑动交互手势
35-
let interactiveTransitionRecognizer = UIScreenEdgePanGestureRecognizer.init(target: self, action: Selector("interactiveTransitionRecognizerAction:"))
36-
interactiveTransitionRecognizer.edges = .Right;
36+
interactiveTransitionRecognizer.edges = .Left
3737
self.view.addGestureRecognizer(interactiveTransitionRecognizer)
38-
39-
/// 设置动画代理
40-
if let transitionDelegate = self.transitioningDelegate as? InteractivityTransitionDelegate {
41-
transitionDelegate.gestureRecognizer = interactiveTransitionRecognizer
42-
}
4338
}
4439

4540
override func didReceiveMemoryWarning() {
4641
super.didReceiveMemoryWarning()
4742
// Dispose of any resources that can be recreated.
4843
}
44+
}
4945

46+
extension InteractivitySecondViewController {
47+
func interactiveTransitionRecognizerAction(sender: UIScreenEdgePanGestureRecognizer) {
48+
if sender.state == .Began {
49+
self.animationButtonDidClicked(sender)
50+
}
51+
}
5052
}
5153

5254
extension InteractivitySecondViewController {
53-
func buttonDidClicked() {
55+
func animationButtonDidClicked(sender: AnyObject) {
5456
/**
5557
* 应该由FirstVC执行下面这行代码,为了保持demo简单,突出重点,这里的写法其实是不严格的,请见谅
5658
*/
5759
if let transitionDelegate = self.transitioningDelegate as? InteractivityTransitionDelegate {
60+
if sender.isKindOfClass(UIGestureRecognizer) {
61+
transitionDelegate.gestureRecognizer = interactiveTransitionRecognizer
62+
}
63+
else {
64+
transitionDelegate.gestureRecognizer = nil
65+
}
5866
transitionDelegate.targetEdge = .Left
5967
}
6068
self.dismissViewControllerAnimated(true, completion: nil)

0 commit comments

Comments
 (0)