Skip to content

Commit 8878902

Browse files
author
chenhongwei
committed
first commit 2016.3.16
1 parent fd44493 commit 8878902

File tree

13 files changed

+309
-4
lines changed

13 files changed

+309
-4
lines changed

HWAnimationTransition_Swift.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
92D498B41C9985F900D6F4F0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 92D498B21C9985F900D6F4F0 /* LaunchScreen.storyboard */; };
1515
92D498BF1C9985F900D6F4F0 /* HWAnimationTransition_SwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D498BE1C9985F900D6F4F0 /* HWAnimationTransition_SwiftTests.swift */; };
1616
92D498CA1C9985F900D6F4F0 /* HWAnimationTransition_SwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D498C91C9985F900D6F4F0 /* HWAnimationTransition_SwiftUITests.swift */; };
17+
92D498D81C9986BE00D6F4F0 /* HWNavigationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D498D71C9986BE00D6F4F0 /* HWNavigationDelegate.swift */; };
18+
92D498DA1C99870900D6F4F0 /* HWTransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D498D91C99870900D6F4F0 /* HWTransitionAnimator.swift */; };
1719
/* End PBXBuildFile section */
1820

1921
/* Begin PBXContainerItemProxy section */
@@ -47,6 +49,8 @@
4749
92D498C51C9985F900D6F4F0 /* HWAnimationTransition_SwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HWAnimationTransition_SwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
4850
92D498C91C9985F900D6F4F0 /* HWAnimationTransition_SwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HWAnimationTransition_SwiftUITests.swift; sourceTree = "<group>"; };
4951
92D498CB1C9985F900D6F4F0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
52+
92D498D71C9986BE00D6F4F0 /* HWNavigationDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HWNavigationDelegate.swift; sourceTree = "<group>"; };
53+
92D498D91C99870900D6F4F0 /* HWTransitionAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HWTransitionAnimator.swift; sourceTree = "<group>"; };
5054
/* End PBXFileReference section */
5155

5256
/* Begin PBXFrameworksBuildPhase section */
@@ -99,6 +103,8 @@
99103
children = (
100104
92D498A91C9985F900D6F4F0 /* AppDelegate.swift */,
101105
92D498AB1C9985F900D6F4F0 /* ViewController.swift */,
106+
92D498D71C9986BE00D6F4F0 /* HWNavigationDelegate.swift */,
107+
92D498D91C99870900D6F4F0 /* HWTransitionAnimator.swift */,
102108
92D498AD1C9985F900D6F4F0 /* Main.storyboard */,
103109
92D498B01C9985F900D6F4F0 /* Assets.xcassets */,
104110
92D498B21C9985F900D6F4F0 /* LaunchScreen.storyboard */,
@@ -258,6 +264,8 @@
258264
files = (
259265
92D498AC1C9985F900D6F4F0 /* ViewController.swift in Sources */,
260266
92D498AA1C9985F900D6F4F0 /* AppDelegate.swift in Sources */,
267+
92D498DA1C99870900D6F4F0 /* HWTransitionAnimator.swift in Sources */,
268+
92D498D81C9986BE00D6F4F0 /* HWNavigationDelegate.swift in Sources */,
261269
);
262270
runOnlyForDeploymentPostprocessing = 0;
263271
};

HWAnimationTransition_Swift/Assets.xcassets/AppIcon.appiconset/Contents.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@
5959
"idiom" : "ipad",
6060
"size" : "76x76",
6161
"scale" : "2x"
62+
},
63+
{
64+
"idiom" : "ipad",
65+
"size" : "83.5x83.5",
66+
"scale" : "2x"
6267
}
6368
],
6469
"info" : {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"info" : {
3+
"version" : 1,
4+
"author" : "xcode"
5+
}
6+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"scale" : "1x"
6+
},
7+
{
8+
"idiom" : "universal",
9+
"filename" : "fox.png",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"version" : 1,
19+
"author" : "xcode"
20+
}
21+
}
40.7 KB
Loading
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"scale" : "1x"
6+
},
7+
{
8+
"idiom" : "universal",
9+
"filename" : "rabbit.png",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"version" : 1,
19+
"author" : "xcode"
20+
}
21+
}
31.2 KB
Loading
Lines changed: 123 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,144 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BZG-L0-DG2">
33
<dependencies>
4-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
4+
<deployment identifier="iOS"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
56
</dependencies>
67
<scenes>
78
<!--View Controller-->
89
<scene sceneID="tne-QT-ifu">
910
<objects>
10-
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
11+
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="HWAnimationTransition_Swift" customModuleProvider="target" sceneMemberID="viewController">
1112
<layoutGuides>
1213
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
1314
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
1415
</layoutGuides>
1516
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
1617
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
1718
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
18-
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
19+
<subviews>
20+
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AnH-Dh-jiW">
21+
<rect key="frame" x="536" y="20" width="44" height="44"/>
22+
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
23+
<constraints>
24+
<constraint firstAttribute="width" constant="44" id="b2g-it-lFC"/>
25+
<constraint firstAttribute="height" constant="44" id="byn-SU-3Kg"/>
26+
</constraints>
27+
<userDefinedRuntimeAttributes>
28+
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
29+
<integer key="value" value="22"/>
30+
</userDefinedRuntimeAttribute>
31+
</userDefinedRuntimeAttributes>
32+
<connections>
33+
<segue destination="E9y-5V-s6T" kind="show" identifier="PushSegue" id="IZa-Zw-GAT"/>
34+
</connections>
35+
</button>
36+
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fox" translatesAutoresizingMaskIntoConstraints="NO" id="jvm-4n-mmg">
37+
<rect key="frame" x="150" y="190" width="300" height="220"/>
38+
<constraints>
39+
<constraint firstAttribute="width" constant="300" id="ikm-qO-ThL"/>
40+
<constraint firstAttribute="height" constant="220" id="oh7-VE-i2u"/>
41+
</constraints>
42+
</imageView>
43+
</subviews>
44+
<color key="backgroundColor" red="0.3294117647" green="0.70588235290000001" blue="0.38431372549999998" alpha="1" colorSpace="calibratedRGB"/>
45+
<constraints>
46+
<constraint firstItem="AnH-Dh-jiW" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="20" id="4Zq-t3-zu7"/>
47+
<constraint firstItem="jvm-4n-mmg" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="5bP-Mv-B6I"/>
48+
<constraint firstAttribute="trailing" secondItem="AnH-Dh-jiW" secondAttribute="trailing" constant="20" id="LYU-iE-Ii8"/>
49+
<constraint firstItem="jvm-4n-mmg" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="gk2-8h-fW3"/>
50+
</constraints>
1951
</view>
52+
<navigationItem key="navigationItem" id="Lvc-c2-wO0"/>
53+
<connections>
54+
<outlet property="popBtn" destination="AnH-Dh-jiW" id="5Hp-IX-ahk"/>
55+
</connections>
2056
</viewController>
2157
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
2258
</objects>
59+
<point key="canvasLocation" x="769" y="339"/>
60+
</scene>
61+
<!--View Controller-->
62+
<scene sceneID="BBk-PK-x6i">
63+
<objects>
64+
<viewController id="E9y-5V-s6T" customClass="ViewController" customModule="HWAnimationTransition_Swift" customModuleProvider="target" sceneMemberID="viewController">
65+
<layoutGuides>
66+
<viewControllerLayoutGuide type="top" id="5oP-Bv-ABU"/>
67+
<viewControllerLayoutGuide type="bottom" id="VXr-dp-3ZF"/>
68+
</layoutGuides>
69+
<view key="view" contentMode="scaleToFill" id="YiM-ri-ZZk">
70+
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
71+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
72+
<subviews>
73+
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nqF-Cr-VlI">
74+
<rect key="frame" x="536" y="20" width="44" height="44"/>
75+
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
76+
<constraints>
77+
<constraint firstAttribute="width" constant="44" id="hE7-4t-ycS"/>
78+
<constraint firstAttribute="height" constant="44" id="hcz-fe-ih0"/>
79+
</constraints>
80+
<userDefinedRuntimeAttributes>
81+
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
82+
<integer key="value" value="22"/>
83+
</userDefinedRuntimeAttribute>
84+
</userDefinedRuntimeAttributes>
85+
<connections>
86+
<action selector="popClick:" destination="E9y-5V-s6T" eventType="touchUpInside" id="m6X-0b-IGB"/>
87+
</connections>
88+
</button>
89+
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="rabbit" translatesAutoresizingMaskIntoConstraints="NO" id="LC1-nK-2oj">
90+
<rect key="frame" x="100" y="140" width="401" height="319"/>
91+
<constraints>
92+
<constraint firstAttribute="height" constant="319" id="NcD-Wp-fLI"/>
93+
<constraint firstAttribute="width" constant="401" id="VVg-uY-Sdv"/>
94+
</constraints>
95+
</imageView>
96+
</subviews>
97+
<color key="backgroundColor" red="0.96470588239999999" green="0.70980392160000005" blue="0.35686274509999999" alpha="1" colorSpace="calibratedRGB"/>
98+
<constraints>
99+
<constraint firstAttribute="trailing" secondItem="nqF-Cr-VlI" secondAttribute="trailing" constant="20" id="2vA-d3-o8S"/>
100+
<constraint firstItem="nqF-Cr-VlI" firstAttribute="top" secondItem="5oP-Bv-ABU" secondAttribute="bottom" constant="20" id="UW6-DM-Aym"/>
101+
<constraint firstItem="LC1-nK-2oj" firstAttribute="centerX" secondItem="YiM-ri-ZZk" secondAttribute="centerX" constant="0.5" id="hgQ-vE-PGh"/>
102+
<constraint firstItem="LC1-nK-2oj" firstAttribute="centerY" secondItem="YiM-ri-ZZk" secondAttribute="centerY" constant="-0.5" id="rI9-fY-dRL"/>
103+
</constraints>
104+
</view>
105+
<nil key="simulatedStatusBarMetrics"/>
106+
<connections>
107+
<outlet property="popBtn" destination="nqF-Cr-VlI" id="Pt4-pW-GEM"/>
108+
</connections>
109+
</viewController>
110+
<placeholder placeholderIdentifier="IBFirstResponder" id="WPY-zI-WuH" userLabel="First Responder" sceneMemberID="firstResponder"/>
111+
</objects>
112+
<point key="canvasLocation" x="769" y="1001"/>
113+
</scene>
114+
<!--Navigation Controller-->
115+
<scene sceneID="c0C-im-ZDU">
116+
<objects>
117+
<navigationController automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="BZG-L0-DG2" sceneMemberID="viewController">
118+
<toolbarItems/>
119+
<nil key="simulatedStatusBarMetrics"/>
120+
<navigationBar key="navigationBar" contentMode="scaleToFill" id="A2i-tw-xZd">
121+
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
122+
<autoresizingMask key="autoresizingMask"/>
123+
</navigationBar>
124+
<nil name="viewControllers"/>
125+
<connections>
126+
<outlet property="delegate" destination="qtS-fA-obs" id="eeA-4Z-1Fr"/>
127+
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="dY3-KS-QdQ"/>
128+
</connections>
129+
</navigationController>
130+
<placeholder placeholderIdentifier="IBFirstResponder" id="qYp-L2-22I" userLabel="First Responder" sceneMemberID="firstResponder"/>
131+
<customObject id="qtS-fA-obs" customClass="HWNavigationDelegate" customModule="HWAnimationTransition_Swift" customModuleProvider="target">
132+
<connections>
133+
<outlet property="navigationController" destination="BZG-L0-DG2" id="kbs-Xu-lMk"/>
134+
</connections>
135+
</customObject>
136+
</objects>
137+
<point key="canvasLocation" x="146" y="339"/>
23138
</scene>
24139
</scenes>
140+
<resources>
141+
<image name="fox" width="220" height="212"/>
142+
<image name="rabbit" width="220" height="212"/>
143+
</resources>
25144
</document>
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// HWNavigationDelegate.swift
3+
// HWAnimationTransition_Swift
4+
//
5+
// Created by HenryCheng on 16/3/16.
6+
// Copyright © 2016年 www.igancao.com. All rights reserved.
7+
//
8+
9+
import UIKit
10+
11+
class HWNavigationDelegate: NSObject, UINavigationControllerDelegate {
12+
13+
@IBOutlet weak var navigationController: UINavigationController!
14+
var interactionController: UIPercentDrivenInteractiveTransition?
15+
16+
func navigationController(navigationController: UINavigationController,
17+
interactionControllerForAnimationController animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
18+
return self.interactionController
19+
}
20+
21+
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
22+
23+
return HWTransitionAnimator()
24+
}
25+
26+
override func awakeFromNib() {
27+
super.awakeFromNib()
28+
let panGesture = UIPanGestureRecognizer(target: self, action: Selector("panned:"))
29+
self.navigationController.view.addGestureRecognizer(panGesture)
30+
}
31+
32+
func panned(gestureRecognizer: UIPanGestureRecognizer) {
33+
switch gestureRecognizer.state {
34+
case .Began:
35+
36+
self.interactionController = UIPercentDrivenInteractiveTransition()
37+
if self.navigationController?.viewControllers.count > 1 {
38+
self.navigationController?.popViewControllerAnimated(true)
39+
} else {
40+
self.navigationController?.topViewController!.performSegueWithIdentifier("PushSegue", sender: nil)
41+
}
42+
case .Changed:
43+
44+
let translation = gestureRecognizer.translationInView(self.navigationController!.view)
45+
let completionProgress = translation.x / CGRectGetWidth(self.navigationController!.view.bounds)
46+
self.interactionController?.updateInteractiveTransition(completionProgress)
47+
case .Ended:
48+
49+
if (gestureRecognizer.velocityInView(self.navigationController!.view).x > 0) {
50+
self.interactionController?.finishInteractiveTransition()
51+
} else {
52+
self.interactionController?.cancelInteractiveTransition()
53+
}
54+
self.interactionController = nil
55+
56+
default:
57+
self.interactionController?.cancelInteractiveTransition()
58+
self.interactionController = nil
59+
}
60+
}
61+
62+
63+
64+
}

0 commit comments

Comments
 (0)