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

Commit 9be1e85

Browse files
author
Jeff Verkoeyen
committed
Merge branch 'release-candidate' into stable
2 parents c52f732 + 9bcc0b4 commit 9be1e85

File tree

8 files changed

+136
-5
lines changed

8 files changed

+136
-5
lines changed

.jazzy.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module: MotionInterchange
2-
module_version: 1.5.0
2+
module_version: 1.6.0
33
sdk: iphonesimulator
44
umbrella_header: src/MotionInterchange.h
55
objc: true
66
github_url: https://github.com/material-motion/motion-interchange-objc
7-
github_file_prefix: https://github.com/material-motion/motion-interchange-objc/tree/v1.5.0
7+
github_file_prefix: https://github.com/material-motion/motion-interchange-objc/tree/v1.6.0
88

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
# 1.6.0
2+
3+
This patch release introduces a compatibility initializer for creating Objective-C animation traits from C-style motion timings.
4+
5+
## Source changes
6+
7+
* [Add a legacy initializer for animation traits. (#34)](https://github.com/material-motion/motion-interchange-objc/commit/e3321d0e4081de1f3d8edee115af0a9ea2142c48) (featherless)
8+
9+
## API changes
10+
11+
Auto-generated by running:
12+
13+
apidiff origin/stable release-candidate objc src/MotionInterchange.h
14+
15+
#### MDMAnimationTraits(Legacy)
16+
17+
*new* method: `-initWithMotionTiming:` in `MDMAnimationTraits(Legacy)`
18+
19+
*new* category: `MDMAnimationTraits(Legacy)`
20+
121
# 1.5.0
222

323
This minor release introduces new Objective-C APIs for creating and storing animation traits.

MotionInterchange.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |s|
22
s.name = "MotionInterchange"
33
s.summary = "Motion interchange format."
4-
s.version = "1.5.0"
4+
s.version = "1.6.0"
55
s.authors = "The Material Motion Authors"
66
s.license = "Apache 2.0"
77
s.homepage = "https://github.com/material-motion/motion-interchange-objc"

Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
PODS:
22
- CatalogByConvention (2.1.1)
3-
- MotionInterchange (1.5.0)
3+
- MotionInterchange (1.6.0)
44

55
DEPENDENCIES:
66
- CatalogByConvention
@@ -12,7 +12,7 @@ EXTERNAL SOURCES:
1212

1313
SPEC CHECKSUMS:
1414
CatalogByConvention: c3a5319de04250a7cd4649127fcfca5fe3322a43
15-
MotionInterchange: 27bef5bbb1e7a59242c38cf2f1ccab83ca569f55
15+
MotionInterchange: ead0e3ae1f3a5fb539e289debbc7ae036160a10d
1616

1717
PODFILE CHECKSUM: 09090d12db5aab00a13fe82da94f338ebd03f5dc
1818

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
667A3F541DEE273000CB3A99 /* TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667A3F531DEE273000CB3A99 /* TableOfContents.swift */; };
2828
66C6FB9E1FE175CA0039F790 /* MDMMotionCurveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C6FB9A1FE175B80039F790 /* MDMMotionCurveTests.swift */; };
2929
66C6FB9F1FE175D00039F790 /* MDMMotionCurveTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C6FB9B1FE175B80039F790 /* MDMMotionCurveTests.m */; };
30+
66C6FBA11FE1A0E30039F790 /* MDMLegacyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C6FBA01FE1A0E30039F790 /* MDMLegacyAPITests.swift */; };
3031
8867B13812C3FF5D47DAB6A6 /* Pods_UnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7FF982F18E05B85C840EA24 /* Pods_UnitTests.framework */; };
3132
A433D59338049BD05D945199 /* Pods_MotionInterchangeCatalog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB060E9F4ECA42A5E69FB42A /* Pods_MotionInterchangeCatalog.framework */; };
3233
/* End PBXBuildFile section */
@@ -78,6 +79,7 @@
7879
667A3F531DEE273000CB3A99 /* TableOfContents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableOfContents.swift; sourceTree = "<group>"; };
7980
66C6FB9A1FE175B80039F790 /* MDMMotionCurveTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MDMMotionCurveTests.swift; sourceTree = "<group>"; };
8081
66C6FB9B1FE175B80039F790 /* MDMMotionCurveTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MDMMotionCurveTests.m; sourceTree = "<group>"; };
82+
66C6FBA01FE1A0E30039F790 /* MDMLegacyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDMLegacyAPITests.swift; sourceTree = "<group>"; };
8183
CF426CCC8068036D56265374 /* Pods-UnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UnitTests.debug.xcconfig"; path = "../../../Pods/Target Support Files/Pods-UnitTests/Pods-UnitTests.debug.xcconfig"; sourceTree = "<group>"; };
8284
EB060E9F4ECA42A5E69FB42A /* Pods_MotionInterchangeCatalog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MotionInterchangeCatalog.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8385
F7FF982F18E05B85C840EA24 /* Pods_UnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_UnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -174,6 +176,7 @@
174176
children = (
175177
664C8C521FD5A555004ED471 /* CAMediaTimingFunctionTests.swift */,
176178
664C8C581FD5A8AC004ED471 /* MDMAnimationTraitsTests.swift */,
179+
66C6FBA01FE1A0E30039F790 /* MDMLegacyAPITests.swift */,
177180
6619E1D81FA0ED0300F3AB25 /* MDMModalMovementTimingTests.m */,
178181
664C8C541FD5A7B7004ED471 /* MDMRepetitionTests.swift */,
179182
664C8C561FD5A831004ED471 /* MDMRepetitionOverTimeTests.swift */,
@@ -496,6 +499,7 @@
496499
664C8C531FD5A555004ED471 /* CAMediaTimingFunctionTests.swift in Sources */,
497500
660248AE1FD1EE78004C0147 /* MDMSpringTimingCurve.swift in Sources */,
498501
66C6FB9E1FE175CA0039F790 /* MDMMotionCurveTests.swift in Sources */,
502+
66C6FBA11FE1A0E30039F790 /* MDMLegacyAPITests.swift in Sources */,
499503
6619E1D91FA0ED0300F3AB25 /* MDMModalMovementTimingTests.m in Sources */,
500504
66C6FB9F1FE175D00039F790 /* MDMMotionCurveTests.m in Sources */,
501505
664C8C571FD5A831004ED471 /* MDMRepetitionOverTimeTests.swift in Sources */,

src/MDMAnimationTraits.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import <Foundation/Foundation.h>
1919
#import <UIKit/UIKit.h>
2020

21+
#import "MDMMotionTiming.h"
2122
#import "MDMRepetitionTraits.h"
2223
#import "MDMSubclassingRestricted.h"
2324
#import "MDMTimingCurve.h"
@@ -145,3 +146,13 @@ MDM_SUBCLASSING_RESTRICTED
145146

146147
@end
147148

149+
@interface MDMAnimationTraits (Legacy)
150+
151+
/**
152+
Initializes the instance with the provided legacy C-style animation trait structure.
153+
154+
@param timing A legacy C-style representation of animation traits.
155+
*/
156+
- (nonnull instancetype)initWithMotionTiming:(MDMMotionTiming)timing;
157+
158+
@end

src/MDMAnimationTraits.m

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#import "MDMAnimationTraits.h"
1818

1919
#import "CAMediaTimingFunction+MDMTimingCurve.h"
20+
#import "MDMRepetition.h"
21+
#import "MDMRepetitionOverTime.h"
2022
#import "MDMSpringTimingCurve.h"
2123

2224
@implementation MDMAnimationTraits
@@ -80,6 +82,53 @@ - (instancetype)initWithDelay:(NSTimeInterval)delay
8082
return self;
8183
}
8284

85+
- (nonnull instancetype)initWithMotionTiming:(MDMMotionTiming)timing {
86+
id<MDMTimingCurve> timingCurve;
87+
switch (timing.curve.type) {
88+
case MDMMotionCurveTypeInstant:
89+
timingCurve = nil;
90+
break;
91+
#pragma clang diagnostic push
92+
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
93+
case MDMMotionCurveTypeDefault:
94+
#pragma clang diagnostic pop
95+
case MDMMotionCurveTypeBezier:
96+
timingCurve = [CAMediaTimingFunction functionWithControlPoints:(float)timing.curve.data[0]
97+
:(float)timing.curve.data[1]
98+
:(float)timing.curve.data[2]
99+
:(float)timing.curve.data[3]];
100+
break;
101+
case MDMMotionCurveTypeSpring: {
102+
CGFloat *data = timing.curve.data;
103+
timingCurve =
104+
[[MDMSpringTimingCurve alloc] initWithMass:data[MDMSpringMotionCurveDataIndexMass]
105+
tension:data[MDMSpringMotionCurveDataIndexTension]
106+
friction:data[MDMSpringMotionCurveDataIndexFriction]
107+
initialVelocity:data[MDMSpringMotionCurveDataIndexInitialVelocity]];
108+
break;
109+
}
110+
}
111+
id<MDMRepetitionTraits> repetition;
112+
switch (timing.repetition.type) {
113+
case MDMMotionRepetitionTypeNone:
114+
repetition = nil;
115+
break;
116+
117+
case MDMMotionRepetitionTypeCount:
118+
repetition = [[MDMRepetition alloc] initWithNumberOfRepetitions:timing.repetition.amount
119+
autoreverses:timing.repetition.autoreverses];
120+
break;
121+
case MDMMotionRepetitionTypeDuration:
122+
repetition = [[MDMRepetitionOverTime alloc] initWithDuration:timing.repetition.amount
123+
autoreverses:timing.repetition.autoreverses];
124+
break;
125+
}
126+
return [self initWithDelay:timing.delay
127+
duration:timing.duration
128+
timingCurve:timingCurve
129+
repetition:repetition];
130+
}
131+
83132
#pragma mark - NSCopying
84133

85134
- (id)copyWithZone:(NSZone *)zone {

tests/unit/MDMLegacyAPITests.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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 XCTest
18+
import MotionInterchange
19+
20+
class MDMLegacyAPITests: XCTestCase {
21+
22+
func testTimingValuesMatchTraitValues() {
23+
let timing = MotionTiming(delay: 0.1,
24+
duration: 0.2,
25+
curve: MotionCurveMakeBezier(p1x: 0.3, p1y: 0.4, p2x: 0.5, p2y: 0.6),
26+
repetition: .init(type: .duration, amount: 0.7, autoreverses: true))
27+
28+
let traits = MDMAnimationTraits(motionTiming: timing)
29+
30+
XCTAssertEqualWithAccuracy(traits.duration, timing.duration, accuracy: 0.001)
31+
XCTAssertEqualWithAccuracy(traits.delay, timing.delay, accuracy: 0.001)
32+
XCTAssertTrue(traits.timingCurve is CAMediaTimingFunction)
33+
if let timingCurve = traits.timingCurve as? CAMediaTimingFunction {
34+
XCTAssertEqualWithAccuracy(timingCurve.mdm_point1.x, timing.curve.data.0, accuracy: 0.001)
35+
XCTAssertEqualWithAccuracy(timingCurve.mdm_point1.y, timing.curve.data.1, accuracy: 0.001)
36+
XCTAssertEqualWithAccuracy(timingCurve.mdm_point2.x, timing.curve.data.2, accuracy: 0.001)
37+
XCTAssertEqualWithAccuracy(timingCurve.mdm_point2.y, timing.curve.data.3, accuracy: 0.001)
38+
}
39+
XCTAssertTrue(traits.repetition is MDMRepetitionOverTime)
40+
if let repetition = traits.repetition as? MDMRepetitionOverTime {
41+
XCTAssertEqualWithAccuracy(repetition.duration, timing.repetition.amount, accuracy: 0.001)
42+
XCTAssertEqual(repetition.autoreverses, timing.repetition.autoreverses.boolValue)
43+
}
44+
}
45+
46+
}
47+

0 commit comments

Comments
 (0)