Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
Motion
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitriy Stepanets
Motion
Commits
ddf83ac5
Commit
ddf83ac5
authored
Jun 01, 2017
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adding MotionTransitionState helper functions
parent
65aef2c1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
412 additions
and
112 deletions
+412
-112
Motion.xcodeproj/project.pbxproj
+8
-4
Sources/DefaultMotionTransitionPreprocessor.swift
+1
-1
Sources/Motion+CABasicAnimation.swift
+15
-3
Sources/Motion+CALayer.swift
+6
-3
Sources/Motion+UIView.swift
+32
-2
Sources/Motion+UIViewController.swift
+9
-8
Sources/Motion.swift
+31
-12
Sources/MotionAnimation.swift
+2
-1
Sources/MotionContext.swift
+2
-2
Sources/MotionController.swift
+0
-34
Sources/MotionTransitionAnimation.swift
+270
-40
Sources/MotionTransitionAnimator.swift
+1
-1
Sources/MotionTransitionPreprocessor.swift
+1
-1
Sources/MotionTransitionState.swift
+34
-0
No files found.
Motion.xcodeproj/project.pbxproj
View file @
ddf83ac5
...
@@ -23,13 +23,14 @@
...
@@ -23,13 +23,14 @@
966C53B51EDD327D00A82A57
/* MotionCascadeDirection.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53B41EDD327D00A82A57
/* MotionCascadeDirection.swift */
;
};
966C53B51EDD327D00A82A57
/* MotionCascadeDirection.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53B41EDD327D00A82A57
/* MotionCascadeDirection.swift */
;
};
966C53B71EDD328F00A82A57
/* MotionCoordinateSpace.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53B61EDD328F00A82A57
/* MotionCoordinateSpace.swift */
;
};
966C53B71EDD328F00A82A57
/* MotionCoordinateSpace.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53B61EDD328F00A82A57
/* MotionCoordinateSpace.swift */
;
};
966C53B91EDD366800A82A57
/* MotionTransitionPreprocessor.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53B81EDD366800A82A57
/* MotionTransitionPreprocessor.swift */
;
};
966C53B91EDD366800A82A57
/* MotionTransitionPreprocessor.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53B81EDD366800A82A57
/* MotionTransitionPreprocessor.swift */
;
};
966C53BB1EDD381E00A82A57
/* MotionSubviewPreprocessor.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53BA1EDD381E00A82A57
/* MotionSubviewPreprocessor.swift */
;
};
966C53BD1EDD396800A82A57
/* MotionAnimationFillMode.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53BC1EDD396800A82A57
/* MotionAnimationFillMode.swift */
;
};
966C53BD1EDD396800A82A57
/* MotionAnimationFillMode.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53BC1EDD396800A82A57
/* MotionAnimationFillMode.swift */
;
};
966C53BF1EDD399400A82A57
/* MotionAnimationTimingFunction.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53BE1EDD399400A82A57
/* MotionAnimationTimingFunction.swift */
;
};
966C53BF1EDD399400A82A57
/* MotionAnimationTimingFunction.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
966C53BE1EDD399400A82A57
/* MotionAnimationTimingFunction.swift */
;
};
96BFC1701E63C3460075DE1F
/* MotionController.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE31E4382B100B22906
/* MotionController.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96BFC1701E63C3460075DE1F
/* MotionController.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE31E4382B100B22906
/* MotionController.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96C98DE41E4382B100B22906
/* MotionController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE31E4382B100B22906
/* MotionController.swift */
;
};
96C98DE41E4382B100B22906
/* MotionController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE31E4382B100B22906
/* MotionController.swift */
;
};
96C98DE61E43848500B22906
/* MotionAnimation.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE51E43848500B22906
/* MotionAnimation.swift */
;
};
96C98DE61E43848500B22906
/* MotionAnimation.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE51E43848500B22906
/* MotionAnimation.swift */
;
};
96C98DEB1E4389BE00B22906
/* MotionAnimation.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE51E43848500B22906
/* MotionAnimation.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96C98DEB1E4389BE00B22906
/* MotionAnimation.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96C98DE51E43848500B22906
/* MotionAnimation.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96E846F41EDDA62F0005F32F
/* DefaultMotionTransitionPreprocessor.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96E846F31EDDA62F0005F32F
/* DefaultMotionTransitionPreprocessor.swift */
;
};
96E846F61EDDA7F20005F32F
/* MotionTransitionState.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96E846F51EDDA7F20005F32F
/* MotionTransitionState.swift */
;
};
/* End PBXBuildFile section */
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
/* Begin PBXFileReference section */
...
@@ -47,7 +48,6 @@
...
@@ -47,7 +48,6 @@
966C53B41EDD327D00A82A57
/* MotionCascadeDirection.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionCascadeDirection.swift
;
sourceTree
=
"<group>"
;
};
966C53B41EDD327D00A82A57
/* MotionCascadeDirection.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionCascadeDirection.swift
;
sourceTree
=
"<group>"
;
};
966C53B61EDD328F00A82A57
/* MotionCoordinateSpace.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionCoordinateSpace.swift
;
sourceTree
=
"<group>"
;
};
966C53B61EDD328F00A82A57
/* MotionCoordinateSpace.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionCoordinateSpace.swift
;
sourceTree
=
"<group>"
;
};
966C53B81EDD366800A82A57
/* MotionTransitionPreprocessor.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionTransitionPreprocessor.swift
;
sourceTree
=
"<group>"
;
};
966C53B81EDD366800A82A57
/* MotionTransitionPreprocessor.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionTransitionPreprocessor.swift
;
sourceTree
=
"<group>"
;
};
966C53BA1EDD381E00A82A57
/* MotionSubviewPreprocessor.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionSubviewPreprocessor.swift
;
sourceTree
=
"<group>"
;
};
966C53BC1EDD396800A82A57
/* MotionAnimationFillMode.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimationFillMode.swift
;
sourceTree
=
"<group>"
;
};
966C53BC1EDD396800A82A57
/* MotionAnimationFillMode.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimationFillMode.swift
;
sourceTree
=
"<group>"
;
};
966C53BE1EDD399400A82A57
/* MotionAnimationTimingFunction.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimationTimingFunction.swift
;
sourceTree
=
"<group>"
;
};
966C53BE1EDD399400A82A57
/* MotionAnimationTimingFunction.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimationTimingFunction.swift
;
sourceTree
=
"<group>"
;
};
96C98DD11E424AB000B22906
/* Motion.framework */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
includeInIndex
=
0
;
path
=
Motion.framework
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
96C98DD11E424AB000B22906
/* Motion.framework */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
includeInIndex
=
0
;
path
=
Motion.framework
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
...
@@ -56,6 +56,8 @@
...
@@ -56,6 +56,8 @@
96C98DE31E4382B100B22906
/* MotionController.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionController.swift
;
sourceTree
=
"<group>"
;
};
96C98DE31E4382B100B22906
/* MotionController.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionController.swift
;
sourceTree
=
"<group>"
;
};
96C98DE51E43848500B22906
/* MotionAnimation.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimation.swift
;
sourceTree
=
"<group>"
;
};
96C98DE51E43848500B22906
/* MotionAnimation.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimation.swift
;
sourceTree
=
"<group>"
;
};
96C98DED1E438A5700B22906
/* Motion.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
Motion.h
;
sourceTree
=
"<group>"
;
};
96C98DED1E438A5700B22906
/* Motion.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
Motion.h
;
sourceTree
=
"<group>"
;
};
96E846F31EDDA62F0005F32F
/* DefaultMotionTransitionPreprocessor.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
DefaultMotionTransitionPreprocessor.swift
;
sourceTree
=
"<group>"
;
};
96E846F51EDDA7F20005F32F
/* MotionTransitionState.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionTransitionState.swift
;
sourceTree
=
"<group>"
;
};
/* End PBXFileReference section */
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
/* Begin PBXFrameworksBuildPhase section */
...
@@ -93,6 +95,7 @@
...
@@ -93,6 +95,7 @@
96C98DED1E438A5700B22906
/* Motion.h */
,
96C98DED1E438A5700B22906
/* Motion.h */
,
964C153C1EDCF6EA00F0869D
/* Motion.swift */
,
964C153C1EDCF6EA00F0869D
/* Motion.swift */
,
96C98DE31E4382B100B22906
/* MotionController.swift */
,
96C98DE31E4382B100B22906
/* MotionController.swift */
,
96E846F51EDDA7F20005F32F
/* MotionTransitionState.swift */
,
9657A6AB1EDA1601004461DE
/* MotionObserver.swift */
,
9657A6AB1EDA1601004461DE
/* MotionObserver.swift */
,
9657A6B21EDA63FC004461DE
/* MotionContext.swift */
,
9657A6B21EDA63FC004461DE
/* MotionContext.swift */
,
96C98DE51E43848500B22906
/* MotionAnimation.swift */
,
96C98DE51E43848500B22906
/* MotionAnimation.swift */
,
...
@@ -113,7 +116,7 @@
...
@@ -113,7 +116,7 @@
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
966C53B81EDD366800A82A57
/* MotionTransitionPreprocessor.swift */
,
966C53B81EDD366800A82A57
/* MotionTransitionPreprocessor.swift */
,
96
6C53BA1EDD381E00A82A57
/* MotionSubview
Preprocessor.swift */
,
96
E846F31EDDA62F0005F32F
/* DefaultMotionTransition
Preprocessor.swift */
,
);
);
name
=
Preprocessor
;
name
=
Preprocessor
;
sourceTree
=
"<group>"
;
sourceTree
=
"<group>"
;
...
@@ -223,6 +226,7 @@
...
@@ -223,6 +226,7 @@
files
=
(
files
=
(
966C53BD1EDD396800A82A57
/* MotionAnimationFillMode.swift in Sources */
,
966C53BD1EDD396800A82A57
/* MotionAnimationFillMode.swift in Sources */
,
966C53B91EDD366800A82A57
/* MotionTransitionPreprocessor.swift in Sources */
,
966C53B91EDD366800A82A57
/* MotionTransitionPreprocessor.swift in Sources */
,
96E846F41EDDA62F0005F32F
/* DefaultMotionTransitionPreprocessor.swift in Sources */
,
966C53B71EDD328F00A82A57
/* MotionCoordinateSpace.swift in Sources */
,
966C53B71EDD328F00A82A57
/* MotionCoordinateSpace.swift in Sources */
,
966C539E1EDD207800A82A57
/* Motion+UIView.swift in Sources */
,
966C539E1EDD207800A82A57
/* Motion+UIView.swift in Sources */
,
966C53B31EDD325B00A82A57
/* MotionSnapshot.swift in Sources */
,
966C53B31EDD325B00A82A57
/* MotionSnapshot.swift in Sources */
,
...
@@ -232,6 +236,7 @@
...
@@ -232,6 +236,7 @@
9657A6B31EDA63FC004461DE
/* MotionContext.swift in Sources */
,
9657A6B31EDA63FC004461DE
/* MotionContext.swift in Sources */
,
966C53B51EDD327D00A82A57
/* MotionCascadeDirection.swift in Sources */
,
966C53B51EDD327D00A82A57
/* MotionCascadeDirection.swift in Sources */
,
964C15471EDD001A00F0869D
/* MotionTransitionAnimation.swift in Sources */
,
964C15471EDD001A00F0869D
/* MotionTransitionAnimation.swift in Sources */
,
96E846F61EDDA7F20005F32F
/* MotionTransitionState.swift in Sources */
,
966C53B11EDD2FE600A82A57
/* Motion+CABasicAnimation.swift in Sources */
,
966C53B11EDD2FE600A82A57
/* Motion+CABasicAnimation.swift in Sources */
,
961409AA1E43CF1B00E7BA99
/* Motion+Obj-C.swift in Sources */
,
961409AA1E43CF1B00E7BA99
/* Motion+Obj-C.swift in Sources */
,
964C153D1EDCF6EA00F0869D
/* Motion.swift in Sources */
,
964C153D1EDCF6EA00F0869D
/* Motion.swift in Sources */
,
...
@@ -239,7 +244,6 @@
...
@@ -239,7 +244,6 @@
966C53A01EDD20DA00A82A57
/* Motion+UIViewController.swift in Sources */
,
966C53A01EDD20DA00A82A57
/* Motion+UIViewController.swift in Sources */
,
96C98DE41E4382B100B22906
/* MotionController.swift in Sources */
,
96C98DE41E4382B100B22906
/* MotionController.swift in Sources */
,
966C53BF1EDD399400A82A57
/* MotionAnimationTimingFunction.swift in Sources */
,
966C53BF1EDD399400A82A57
/* MotionAnimationTimingFunction.swift in Sources */
,
966C53BB1EDD381E00A82A57
/* MotionSubviewPreprocessor.swift in Sources */
,
);
);
runOnlyForDeploymentPostprocessing
=
0
;
runOnlyForDeploymentPostprocessing
=
0
;
};
};
...
...
Sources/
MotionSubview
Preprocessor.swift
→
Sources/
DefaultMotionTransition
Preprocessor.swift
View file @
ddf83ac5
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
import
UIKit
import
UIKit
public
class
MotionSubview
Preprocessor
:
MotionTransitionPreprocessor
{
public
class
DefaultMotionTransition
Preprocessor
:
MotionTransitionPreprocessor
{
/// A reference to a MotionContext.
/// A reference to a MotionContext.
public
weak
var
context
:
MotionContext
!
public
weak
var
context
:
MotionContext
!
...
...
Sources/Motion+CABasicAnimation.swift
View file @
ddf83ac5
...
@@ -56,6 +56,7 @@ public enum MotionAnimationKeyPath: String {
...
@@ -56,6 +56,7 @@ public enum MotionAnimationKeyPath: String {
case
height
=
"bounds.size.height"
case
height
=
"bounds.size.height"
case
size
=
"bounds.size"
case
size
=
"bounds.size"
case
shadowPath
case
shadowPath
case
shadowColor
case
shadowOffset
case
shadowOffset
case
shadowOpacity
case
shadowOpacity
case
shadowRadius
case
shadowRadius
...
@@ -350,12 +351,12 @@ public struct MotionBasicAnimation {
...
@@ -350,12 +351,12 @@ public struct MotionBasicAnimation {
/**
/**
Creates a CABasicaAnimation for the zPosition key path.
Creates a CABasicaAnimation for the zPosition key path.
- Parameter
index: An In
t.
- Parameter
_ position: A CGFloa
t.
- Returns: A CABasicAnimation.
- Returns: A CABasicAnimation.
*/
*/
public
static
func
zPosition
(
index
:
In
t
)
->
CABasicAnimation
{
public
static
func
zPosition
(
_
position
:
CGFloa
t
)
->
CABasicAnimation
{
let
animation
=
CABasicAnimation
(
keyPath
:
.
zPosition
)
let
animation
=
CABasicAnimation
(
keyPath
:
.
zPosition
)
animation
.
toValue
=
NSNumber
(
integerLiteral
:
index
)
animation
.
toValue
=
NSNumber
(
value
:
Double
(
position
)
)
return
animation
return
animation
}
}
...
@@ -404,6 +405,17 @@ public struct MotionBasicAnimation {
...
@@ -404,6 +405,17 @@ public struct MotionBasicAnimation {
}
}
/**
/**
Creates a CABasicAnimation for the shadowColor key path.
- Parameter color: A UIColor.
- Returns: A CABasicAnimation.
*/
public
static
func
shadow
(
color
:
UIColor
)
->
CABasicAnimation
{
let
animation
=
CABasicAnimation
(
keyPath
:
.
shadowColor
)
animation
.
toValue
=
color
.
cgColor
return
animation
}
/**
Creates a CABasicAnimation for the shadowOffset key path.
Creates a CABasicAnimation for the shadowOffset key path.
- Parameter offset: CGSize.
- Parameter offset: CGSize.
- Returns: A CABasicAnimation.
- Returns: A CABasicAnimation.
...
...
Sources/Motion+CALayer.swift
View file @
ddf83ac5
...
@@ -278,9 +278,9 @@ extension CALayer {
...
@@ -278,9 +278,9 @@ extension CALayer {
fade
.
fromValue
=
s
.
value
(
forKey
:
MotionAnimationKeyPath
.
opacity
.
rawValue
)
??
NSNumber
(
floatLiteral
:
1
)
fade
.
fromValue
=
s
.
value
(
forKey
:
MotionAnimationKeyPath
.
opacity
.
rawValue
)
??
NSNumber
(
floatLiteral
:
1
)
a
.
append
(
fade
)
a
.
append
(
fade
)
case
let
.
zPosition
(
index
):
case
let
.
zPosition
(
position
):
let
zPosition
=
MotionBasicAnimation
.
zPosition
(
index
:
index
)
let
zPosition
=
MotionBasicAnimation
.
zPosition
(
position
)
zPosition
.
fromValue
=
s
.
value
(
forKey
:
MotionAnimationKeyPath
.
zPosition
.
rawValue
)
??
NSNumber
(
integerLiteral
:
0
)
zPosition
.
fromValue
=
s
.
value
(
forKey
:
MotionAnimationKeyPath
.
zPosition
.
rawValue
)
??
NSNumber
(
value
:
0
)
a
.
append
(
zPosition
)
a
.
append
(
zPosition
)
case
.
width
(
_
),
.
height
(
_
),
.
size
(
_
,
_
):
case
.
width
(
_
),
.
height
(
_
),
.
size
(
_
,
_
):
...
@@ -291,6 +291,9 @@ extension CALayer {
...
@@ -291,6 +291,9 @@ extension CALayer {
shadowPath
.
fromValue
=
s
.
shadowPath
shadowPath
.
fromValue
=
s
.
shadowPath
a
.
append
(
shadowPath
)
a
.
append
(
shadowPath
)
case
let
.
shadowColor
(
color
):
a
.
append
(
MotionBasicAnimation
.
shadow
(
color
:
color
))
case
let
.
shadowOffset
(
offset
):
case
let
.
shadowOffset
(
offset
):
let
shadowOffset
=
MotionBasicAnimation
.
shadow
(
offset
:
offset
)
let
shadowOffset
=
MotionBasicAnimation
.
shadow
(
offset
:
offset
)
shadowOffset
.
fromValue
=
s
.
shadowOffset
shadowOffset
.
fromValue
=
s
.
shadowOffset
...
...
Sources/Motion+UIView.swift
View file @
ddf83ac5
...
@@ -33,6 +33,9 @@ import UIKit
...
@@ -33,6 +33,9 @@ import UIKit
fileprivate
var
MotionInstanceKey
:
UInt8
=
0
fileprivate
var
MotionInstanceKey
:
UInt8
=
0
fileprivate
struct
MotionInstance
{
fileprivate
struct
MotionInstance
{
/// A boolean indicating whether Motion is enabled.
fileprivate
var
isEnabled
:
Bool
/// An optional reference to the motion identifier.
/// An optional reference to the motion identifier.
fileprivate
var
identifier
:
String
?
fileprivate
var
identifier
:
String
?
...
@@ -45,7 +48,7 @@ extension UIView {
...
@@ -45,7 +48,7 @@ extension UIView {
fileprivate
var
motionInstance
:
MotionInstance
{
fileprivate
var
motionInstance
:
MotionInstance
{
get
{
get
{
return
AssociatedObject
.
get
(
base
:
self
,
key
:
&
MotionInstanceKey
)
{
return
AssociatedObject
.
get
(
base
:
self
,
key
:
&
MotionInstanceKey
)
{
return
MotionInstance
(
identifier
:
nil
,
animations
:
nil
)
return
MotionInstance
(
i
sEnabled
:
true
,
i
dentifier
:
nil
,
animations
:
nil
)
}
}
}
}
set
(
value
)
{
set
(
value
)
{
...
@@ -53,7 +56,19 @@ extension UIView {
...
@@ -53,7 +56,19 @@ extension UIView {
}
}
}
}
/// A boolean that indicates whether motion is enabled.
@IBInspectable
public
var
isMotionEnabled
:
Bool
{
get
{
return
motionInstance
.
isEnabled
}
set
(
value
)
{
motionInstance
.
isEnabled
=
value
}
}
/// An identifier value used to connect views across UIViewControllers.
/// An identifier value used to connect views across UIViewControllers.
@IBInspectable
open
var
motionIdentifier
:
String
?
{
open
var
motionIdentifier
:
String
?
{
get
{
get
{
return
motionInstance
.
identifier
return
motionInstance
.
identifier
...
@@ -75,6 +90,21 @@ extension UIView {
...
@@ -75,6 +90,21 @@ extension UIView {
}
}
extension
UIView
{
extension
UIView
{
/// Retrieves a single Array of UIViews that are in the view hierarchy.
internal
var
flattenedViewHierarchy
:
[
UIView
]
{
guard
isMotionEnabled
else
{
return
[]
}
if
#available(iOS 9.0, *)
{
return
isHidden
&&
(
superview
is
UICollectionView
||
superview
is
UIStackView
||
self
is
UITableViewCell
)
?
[]
:
([
self
]
+
subviews
.
flatMap
{
$0
.
flattenedViewHierarchy
})
}
return
isHidden
&&
(
superview
is
UICollectionView
||
self
is
UITableViewCell
)
?
[]
:
([
self
]
+
subviews
.
flatMap
{
$0
.
flattenedViewHierarchy
})
}
}
extension
UIView
{
/**
/**
Snapshots the view instance for animations during transitions.
Snapshots the view instance for animations during transitions.
- Parameter afterUpdates: A boolean indicating whether to snapshot the view
- Parameter afterUpdates: A boolean indicating whether to snapshot the view
...
@@ -83,7 +113,7 @@ extension UIView {
...
@@ -83,7 +113,7 @@ extension UIView {
after the snapshot is taken.
after the snapshot is taken.
- Returns: A UIView instance that is a snapshot of the given UIView.
- Returns: A UIView instance that is a snapshot of the given UIView.
*/
*/
open
func
transitionSnapshot
(
afterUpdates
:
Bool
,
shouldHide
:
Bool
=
true
)
->
UIView
{
public
func
transitionSnapshot
(
afterUpdates
:
Bool
,
shouldHide
:
Bool
=
true
)
->
UIView
{
isHidden
=
false
isHidden
=
false
let
oldCornerRadius
=
layer
.
cornerRadius
let
oldCornerRadius
=
layer
.
cornerRadius
...
...
Sources/Motion+UIViewController.swift
View file @
ddf83ac5
...
@@ -53,23 +53,24 @@ extension UIViewController {
...
@@ -53,23 +53,24 @@ extension UIViewController {
}
}
}
}
/// An optional reference to the current snapshot.
/// A boolean that indicates whether motion is enabled.
internal
var
motionSnapshot
:
UIView
?
{
@IBInspectable
public
var
isMotionEnabled
:
Bool
{
get
{
get
{
return
motionControllerInstance
.
snapshot
return
motionControllerInstance
.
isEnabled
}
}
set
(
value
)
{
set
(
value
)
{
motionControllerInstance
.
snapshot
=
value
motionControllerInstance
.
isEnabled
=
value
}
}
}
}
/// A
boolean that indicates whether motion is enabled
.
/// A
n optional reference to the current snapshot
.
public
var
isMotionEnabled
:
Bool
{
internal
var
motionSnapshot
:
UIView
?
{
get
{
get
{
return
motionControllerInstance
.
isEnabled
return
motionControllerInstance
.
snapshot
}
}
set
(
value
)
{
set
(
value
)
{
motionControllerInstance
.
isEnabled
=
value
motionControllerInstance
.
snapshot
=
value
}
}
}
}
}
}
Sources/Motion.swift
View file @
ddf83ac5
...
@@ -185,6 +185,21 @@ extension Motion {
...
@@ -185,6 +185,21 @@ extension Motion {
}
}
extension
Motion
{
extension
Motion
{
/**
Removes a snapshot from a given view controller.
- Parameter for viewController: A UIViewController.
*/
fileprivate
func
removeSnapshot
(
for
viewController
:
UIViewController
?)
{
guard
let
v
=
viewController
?
.
motionSnapshot
else
{
return
}
v
.
removeFromSuperview
()
viewController
?
.
motionSnapshot
=
nil
}
}
extension
Motion
{
/// Prepares the screen snapshot.
/// Prepares the screen snapshot.
fileprivate
func
prepareScreenSnapshot
()
{
fileprivate
func
prepareScreenSnapshot
()
{
screenSnapshot
?
.
removeFromSuperview
()
screenSnapshot
?
.
removeFromSuperview
()
...
@@ -194,7 +209,7 @@ extension Motion {
...
@@ -194,7 +209,7 @@ extension Motion {
/// Prepares the preprocessors.
/// Prepares the preprocessors.
fileprivate
func
preparePreprocessors
()
{
fileprivate
func
preparePreprocessors
()
{
preprocessors
=
[
MotionSubview
Preprocessor
()]
preprocessors
=
[
DefaultMotionTransition
Preprocessor
()]
}
}
/// Prepares the animators.
/// Prepares the animators.
...
@@ -218,7 +233,15 @@ extension Motion {
...
@@ -218,7 +233,15 @@ extension Motion {
context
=
MotionContext
(
container
:
container
)
context
=
MotionContext
(
container
:
container
)
container
.
addSubview
(
toView
)
container
.
addSubview
(
toView
)
container
.
addSubview
(
fromView
)
container
.
addSubview
(
fromView
)
context
.
set
(
fromViews
:
subviews
(
of
:
fromView
),
toViews
:
subviews
(
of
:
toView
))
context
.
set
(
fromViews
:
fromView
.
flattenedViewHierarchy
,
toViews
:
toView
.
flattenedViewHierarchy
)
for
v
in
preprocessors
{
v
.
context
=
context
}
for
v
in
animators
{
v
.
context
=
context
}
}
}
/// Prepares the toView.
/// Prepares the toView.
...
@@ -231,17 +254,11 @@ extension Motion {
...
@@ -231,17 +254,11 @@ extension Motion {
}
}
extension
Motion
{
extension
Motion
{
/**
/// Iterates through all the processors.
Removes a snapshot from a given view controller.
fileprivate
func
processContext
()
{
- Parameter for viewController: A UIViewController.
for
v
in
preprocessors
{
*/
v
.
process
(
fromViews
:
context
.
fromViews
,
toViews
:
context
.
toViews
)
fileprivate
func
removeSnapshot
(
for
viewController
:
UIViewController
?)
{
guard
let
v
=
viewController
?
.
motionSnapshot
else
{
return
}
}
v
.
removeFromSuperview
()
viewController
?
.
motionSnapshot
=
nil
}
}
}
}
...
@@ -262,6 +279,8 @@ extension Motion {
...
@@ -262,6 +279,8 @@ extension Motion {
prepareContainer
()
prepareContainer
()
prepareToView
()
prepareToView
()
prepareContext
()
prepareContext
()
processContext
()
}
}
...
...
Sources/MotionAnimation.swift
View file @
ddf83ac5
...
@@ -62,11 +62,12 @@ public enum MotionAnimation {
...
@@ -62,11 +62,12 @@ public enum MotionAnimation {
case
point
(
x
:
CGFloat
,
y
:
CGFloat
)
case
point
(
x
:
CGFloat
,
y
:
CGFloat
)
case
position
(
x
:
CGFloat
,
y
:
CGFloat
)
case
position
(
x
:
CGFloat
,
y
:
CGFloat
)
case
fade
(
Double
)
case
fade
(
Double
)
case
zPosition
(
In
t
)
case
zPosition
(
CGFloa
t
)
case
width
(
CGFloat
)
case
width
(
CGFloat
)
case
height
(
CGFloat
)
case
height
(
CGFloat
)
case
size
(
width
:
CGFloat
,
height
:
CGFloat
)
case
size
(
width
:
CGFloat
,
height
:
CGFloat
)
case
shadowPath
(
CGPath
)
case
shadowPath
(
CGPath
)
case
shadowColor
(
UIColor
)
case
shadowOffset
(
CGSize
)
case
shadowOffset
(
CGSize
)
case
shadowOpacity
(
Float
)
case
shadowOpacity
(
Float
)
case
shadowRadius
(
CGFloat
)
case
shadowRadius
(
CGFloat
)
...
...
Sources/MotionContext.swift
View file @
ddf83ac5
...
@@ -44,10 +44,10 @@ open class MotionContext {
...
@@ -44,10 +44,10 @@ open class MotionContext {
fileprivate
var
snapshotToView
=
[
UIView
:
UIView
]()
fileprivate
var
snapshotToView
=
[
UIView
:
UIView
]()
/// A reference to the transition from views.
/// A reference to the transition from views.
fileprivate
var
fromViews
:
[
UIView
]
!
internal
var
fromViews
:
[
UIView
]
!
/// A reference to the transition to views.
/// A reference to the transition to views.
fileprivate
var
toViews
:
[
UIView
]
!
internal
var
toViews
:
[
UIView
]
!
/**
/**
An initializer that accepts a given transition container view.
An initializer that accepts a given transition container view.
...
...
Sources/MotionController.swift
View file @
ddf83ac5
...
@@ -128,40 +128,6 @@ public class MotionController: NSObject, MotionSubscriber {
...
@@ -128,40 +128,6 @@ public class MotionController: NSObject, MotionSubscriber {
extension
MotionController
{
extension
MotionController
{
/**
/**
Populates an Array of UIViews with the subviews of a given view.
- Parameter of view: A UIView.
- Returns: An Array of UIViews.
*/
fileprivate
func
subviews
(
of
view
:
UIView
,
views
:
inout
[
UIView
])
{
for
v
in
view
.
subviews
{
if
nil
!=
v
.
motionIdentifier
{
views
.
append
(
v
)
}
subviews
(
of
:
v
,
views
:
&
views
)
}
}
/**
Retrieves all the subviews of a given view.
- Parameter of view: A UIView.
- Returns: An Array of UIViews.
*/
internal
func
subviews
(
of
view
:
UIView
)
->
[
UIView
]
{
var
views
:
[
UIView
]
=
[]
subviews
(
of
:
view
,
views
:
&
views
)
return
views
}
}
extension
MotionController
{
/// Prepares the transition.
fileprivate
func
prepareForTransition
()
{
}
}
extension
MotionController
{
/**
Handles the animation update for the display link.
Handles the animation update for the display link.
- Parameter displayLink: A CADisplayLink.animation
- Parameter displayLink: A CADisplayLink.animation
*/
*/
...
...
Sources/MotionTransitionAnimation.swift
View file @
ddf83ac5
This diff is collapsed.
Click to expand it.
Sources/MotionTransitionAnimator.swift
View file @
ddf83ac5
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
import
UIKit
import
UIKit
public
protocol
MotionTransitionAnimator
{
public
protocol
MotionTransitionAnimator
:
class
{
/// A reference to a MotionContext.
/// A reference to a MotionContext.
weak
var
context
:
MotionContext
!
{
get
set
}
weak
var
context
:
MotionContext
!
{
get
set
}
...
...
Sources/MotionTransitionPreprocessor.swift
View file @
ddf83ac5
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
import
UIKit
import
UIKit
public
protocol
MotionTransitionPreprocessor
{
public
protocol
MotionTransitionPreprocessor
:
class
{
/// A reference to a MotionContext.
/// A reference to a MotionContext.
weak
var
context
:
MotionContext
!
{
get
set
}
weak
var
context
:
MotionContext
!
{
get
set
}
...
...
Sources/MotionTransitionState.swift
0 → 100644
View file @
ddf83ac5
/*
* Copyright (C) 2015 - 2017, Daniel Dahan and CosmicMind, Inc. <http://cosmicmind.com>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of CosmicMind nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import
UIKit
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment