Skip to content
This repository was archived by the owner on Aug 30, 2023. It is now read-only.

Commit c04fd1a

Browse files
authored
Add a UIKit-ish tap to bounce example as a contrast to the traits example. (#100)
1 parent 646b6f6 commit c04fd1a

File tree

4 files changed

+86
-9
lines changed

4 files changed

+86
-9
lines changed

examples/TapToBounceExample.swift renamed to examples/TapToBounceTraitsExample.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
import UIKit
1818
import MotionAnimator
1919

20-
class TapToBounceExampleViewController: UIViewController {
20+
// This demo shows how to use animation traits to define the timings for an animation.
21+
class TapToBounceTraitsExampleViewController: UIViewController {
2122

2223
override func viewDidLoad() {
2324
super.viewDidLoad()
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
Copyright 2017-present The Material Motion Authors. All Rights Reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
import UIKit
18+
import MotionAnimator
19+
20+
// This demo shows how to the MotionAnimator UIKit-ish APIs for animating properties and is provided
21+
// as a contrast to the TapToBounceTraits example.
22+
class TapToBounceUIKitExampleViewController: UIViewController {
23+
24+
override func viewDidLoad() {
25+
super.viewDidLoad()
26+
27+
view.backgroundColor = .white
28+
29+
let circle = UIButton()
30+
circle.bounds = CGRect(x: 0, y: 0, width: 128, height: 128)
31+
circle.center = view.center
32+
circle.layer.cornerRadius = circle.bounds.width / 2
33+
circle.backgroundColor = UIColor(red: (CGFloat)(0xEF) / 255.0,
34+
green: (CGFloat)(0x88) / 255.0,
35+
blue: (CGFloat)(0xAA) / 255.0,
36+
alpha: 1)
37+
view.addSubview(circle)
38+
39+
circle.addTarget(self, action: #selector(didFocus),
40+
for: [.touchDown, .touchDragEnter])
41+
circle.addTarget(self, action: #selector(didUnfocus),
42+
for: [.touchUpInside, .touchUpOutside, .touchDragExit])
43+
}
44+
45+
func didFocus(_ sender: UIButton) {
46+
MotionAnimator.animate(withDuration: 0.8,
47+
delay: 0,
48+
usingSpringWithDamping: 0.5,
49+
initialSpringVelocity: 0,
50+
options: [],
51+
animations: {
52+
sender.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
53+
}, completion: nil)
54+
}
55+
56+
func didUnfocus(_ sender: UIButton) {
57+
MotionAnimator.animate(withDuration: 0.8,
58+
delay: 0,
59+
usingSpringWithDamping: 0.5,
60+
initialSpringVelocity: 0,
61+
options: [],
62+
animations: {
63+
sender.transform = .identity
64+
}, completion: nil)
65+
}
66+
}
67+

examples/apps/Catalog/MotionAnimatorCatalog.xcodeproj/project.pbxproj

+10-6
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88

99
/* Begin PBXBuildFile section */
1010
2AA864EDA683CEF5FAA721BE /* Pods_UnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DBE814C7B88BAD6337052DB /* Pods_UnitTests.framework */; };
11-
660248A41FD1B923004C0147 /* TapToBounceExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660248A31FD1B923004C0147 /* TapToBounceExample.swift */; };
1211
660636021FACC24300C3DFB8 /* TimeScaleFactorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660636011FACC24300C3DFB8 /* TimeScaleFactorTests.swift */; };
1312
6625876C1FB4DB9C00BC7DF1 /* InitialVelocityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6625876B1FB4DB9C00BC7DF1 /* InitialVelocityTests.swift */; };
13+
6635BDB61FE3233500CDCB69 /* TapToBounceTraitsExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6635BDB41FE3233500CDCB69 /* TapToBounceTraitsExample.swift */; };
14+
6635BDB71FE3233500CDCB69 /* TapToBounceUIKitExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6635BDB51FE3233500CDCB69 /* TapToBounceUIKitExample.swift */; };
1415
664F59941FCCE27E002EC56D /* UIKitBehavioralTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664F59931FCCE27E002EC56D /* UIKitBehavioralTests.swift */; };
1516
664F59961FCDB2E6002EC56D /* QuartzCoreBehavioralTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664F59951FCDB2E5002EC56D /* QuartzCoreBehavioralTests.swift */; };
1617
664F59981FCE5CE2002EC56D /* BeginFromCurrentStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664F59971FCE5CE2002EC56D /* BeginFromCurrentStateTests.swift */; };
@@ -24,8 +25,8 @@
2425
667A3F4C1DEE269400CB3A99 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 667A3F4A1DEE269400CB3A99 /* LaunchScreen.storyboard */; };
2526
667A3F541DEE273000CB3A99 /* TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667A3F531DEE273000CB3A99 /* TableOfContents.swift */; };
2627
6687264A1EF04B4C00113675 /* MotionAnimatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 668726491EF04B4C00113675 /* MotionAnimatorTests.swift */; };
27-
668819FA1FE2EB36003A9420 /* UIKitEquivalencyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 668819F91FE2EB36003A9420 /* UIKitEquivalencyTests.swift */; };
2828
668819F81FE2E5C6003A9420 /* SpringTimingCurveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 668819F71FE2E5C6003A9420 /* SpringTimingCurveTests.swift */; };
29+
668819FA1FE2EB36003A9420 /* UIKitEquivalencyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 668819F91FE2EB36003A9420 /* UIKitEquivalencyTests.swift */; };
2930
669B6CA91FD0547100B80B76 /* MotionAnimatorBehavioralTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669B6CA81FD0547100B80B76 /* MotionAnimatorBehavioralTests.swift */; };
3031
66A6A6681FBA158000DE54CB /* AnimationRemovalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66A6A6671FBA158000DE54CB /* AnimationRemovalTests.swift */; };
3132
66BF5A8F1FB0E4CB00E864F6 /* ImplicitAnimationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66BF5A8E1FB0E4CB00E864F6 /* ImplicitAnimationTests.swift */; };
@@ -58,9 +59,10 @@
5859
2DBE814C7B88BAD6337052DB /* Pods_UnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_UnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5960
50D808A6F9E944D54276D32F /* Pods_MotionAnimatorCatalog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MotionAnimatorCatalog.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6061
52820916F8FAA40E942A7333 /* Pods-UnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UnitTests.release.xcconfig"; path = "../../../Pods/Target Support Files/Pods-UnitTests/Pods-UnitTests.release.xcconfig"; sourceTree = "<group>"; };
61-
660248A31FD1B923004C0147 /* TapToBounceExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TapToBounceExample.swift; sourceTree = "<group>"; };
6262
660636011FACC24300C3DFB8 /* TimeScaleFactorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeScaleFactorTests.swift; sourceTree = "<group>"; };
6363
6625876B1FB4DB9C00BC7DF1 /* InitialVelocityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialVelocityTests.swift; sourceTree = "<group>"; };
64+
6635BDB41FE3233500CDCB69 /* TapToBounceTraitsExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TapToBounceTraitsExample.swift; sourceTree = "<group>"; };
65+
6635BDB51FE3233500CDCB69 /* TapToBounceUIKitExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TapToBounceUIKitExample.swift; sourceTree = "<group>"; };
6466
664F59931FCCE27E002EC56D /* UIKitBehavioralTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIKitBehavioralTests.swift; sourceTree = "<group>"; };
6567
664F59951FCDB2E5002EC56D /* QuartzCoreBehavioralTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuartzCoreBehavioralTests.swift; sourceTree = "<group>"; };
6668
664F59971FCE5CE2002EC56D /* BeginFromCurrentStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BeginFromCurrentStateTests.swift; sourceTree = "<group>"; };
@@ -80,8 +82,8 @@
8082
667A3F4D1DEE269400CB3A99 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8183
667A3F531DEE273000CB3A99 /* TableOfContents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableOfContents.swift; sourceTree = "<group>"; };
8284
668726491EF04B4C00113675 /* MotionAnimatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MotionAnimatorTests.swift; sourceTree = "<group>"; };
83-
668819F91FE2EB36003A9420 /* UIKitEquivalencyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKitEquivalencyTests.swift; sourceTree = "<group>"; };
8485
668819F71FE2E5C6003A9420 /* SpringTimingCurveTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpringTimingCurveTests.swift; sourceTree = "<group>"; };
86+
668819F91FE2EB36003A9420 /* UIKitEquivalencyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKitEquivalencyTests.swift; sourceTree = "<group>"; };
8587
669B6CA81FD0547100B80B76 /* MotionAnimatorBehavioralTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MotionAnimatorBehavioralTests.swift; sourceTree = "<group>"; };
8688
66A6A6671FBA158000DE54CB /* AnimationRemovalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimationRemovalTests.swift; sourceTree = "<group>"; };
8789
66BF5A8E1FB0E4CB00E864F6 /* ImplicitAnimationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImplicitAnimationTests.swift; sourceTree = "<group>"; };
@@ -177,7 +179,8 @@
177179
66DD4BF41EEF0ECB00207119 /* CalendarCardExpansionExample.m */,
178180
66DD4BF61EEF1C4B00207119 /* CalendarChipMotionSpec.h */,
179181
66DD4BF71EEF1C4B00207119 /* CalendarChipMotionSpec.m */,
180-
660248A31FD1B923004C0147 /* TapToBounceExample.swift */,
182+
6635BDB41FE3233500CDCB69 /* TapToBounceTraitsExample.swift */,
183+
6635BDB51FE3233500CDCB69 /* TapToBounceUIKitExample.swift */,
181184
);
182185
name = examples;
183186
path = ../..;
@@ -514,10 +517,11 @@
514517
buildActionMask = 2147483647;
515518
files = (
516519
666FAA841D384A6B000363DA /* AppDelegate.swift in Sources */,
520+
6635BDB71FE3233500CDCB69 /* TapToBounceUIKitExample.swift in Sources */,
517521
667A3F541DEE273000CB3A99 /* TableOfContents.swift in Sources */,
522+
6635BDB61FE3233500CDCB69 /* TapToBounceTraitsExample.swift in Sources */,
518523
66DD4BF81EEF1C4B00207119 /* CalendarChipMotionSpec.m in Sources */,
519524
66DD4BF51EEF0ECB00207119 /* CalendarCardExpansionExample.m in Sources */,
520-
660248A41FD1B923004C0147 /* TapToBounceExample.swift in Sources */,
521525
);
522526
runOnlyForDeploymentPostprocessing = 0;
523527
};

examples/apps/Catalog/TableOfContents.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@
1616

1717
// MARK: Catalog by convention
1818

19-
extension TapToBounceExampleViewController {
19+
extension TapToBounceTraitsExampleViewController {
2020
class func catalogBreadcrumbs() -> [String] {
21-
return ["Tap to bounce"]
21+
return ["Tap to bounce (Traits)"]
2222
}
2323
}
2424

25+
extension TapToBounceUIKitExampleViewController {
26+
class func catalogBreadcrumbs() -> [String] {
27+
return ["Tap to bounce (UIKit)"]
28+
}
29+
}

0 commit comments

Comments
 (0)