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
baf1bf57
Unverified
Commit
baf1bf57
authored
Jun 06, 2017
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reworked Motion+UIViewController
parent
53088a53
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
39 additions
and
39 deletions
+39
-39
Motion.xcodeproj/project.pbxproj
+2
-2
Sources/Extensions/Motion+UIView.swift
+17
-17
Sources/Extensions/Motion+UIViewController.swift
+0
-0
Sources/Motion.swift
+6
-6
Sources/MotionController.swift
+14
-14
No files found.
Motion.xcodeproj/project.pbxproj
View file @
baf1bf57
...
...
@@ -53,7 +53,7 @@
/* Begin PBXFileReference section */
963150D11EE50DA6002B0D42
/* Motion+Obj-C.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
"Motion+Obj-C.swift"
;
sourceTree
=
"<group>"
;
};
963150D41EE51C7A002B0D42
/* MotionAnimation.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimation.swift
;
sourceTree
=
"<group>"
;
};
963150D91EE51EB4002B0D42
/* MotionAnimationFillMode.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimationFillMode.swift
;
sourceTree
=
"<group>"
;
};
963150D91EE51EB4002B0D42
/* MotionAnimationFillMode.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
name
=
MotionAnimationFillMode.swift
;
path
=
../Extensions/
MotionAnimationFillMode.swift
;
sourceTree
=
"<group>"
;
};
968989B81EE5B34B003B8F3D
/* MotionHasInsertOrder.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionHasInsertOrder.swift
;
sourceTree
=
"<group>"
;
};
968989DB1EE65F2B003B8F3D
/* MotionPreprocessor.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionPreprocessor.swift
;
sourceTree
=
"<group>"
;
};
968989DD1EE6633E003B8F3D
/* MotionAnimator.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MotionAnimator.swift
;
sourceTree
=
"<group>"
;
};
...
...
@@ -117,6 +117,7 @@
96AEB6671EE4610F009A3BE0
/* MotionDefaultAnimator.swift */
,
96AEB6681EE4610F009A3BE0
/* MotionViewPropertyViewContext.swift */
,
968989B81EE5B34B003B8F3D
/* MotionHasInsertOrder.swift */
,
963150D91EE51EB4002B0D42
/* MotionAnimationFillMode.swift */
,
);
path
=
Animator
;
sourceTree
=
"<group>"
;
...
...
@@ -141,7 +142,6 @@
96AEB6731EE4610F009A3BE0
/* Motion+UIKit.swift */
,
96AEB6741EE4610F009A3BE0
/* Motion+UIView.swift */
,
96AEB6751EE4610F009A3BE0
/* Motion+UIViewController.swift */
,
963150D91EE51EB4002B0D42
/* MotionAnimationFillMode.swift */
,
);
path
=
Extensions
;
sourceTree
=
"<group>"
;
...
...
Sources/Extensions/Motion+UIView.swift
View file @
baf1bf57
...
...
@@ -49,9 +49,9 @@ internal extension UIView {
}
}
fileprivate
var
Motion
InstanceKey
:
UInt8
=
0
fileprivate
var
Associated
InstanceKey
:
UInt8
=
0
fileprivate
struct
Motion
Instance
{
fileprivate
struct
Associated
Instance
{
/// A boolean indicating whether Motion is enabled.
fileprivate
var
isEnabled
:
Bool
...
...
@@ -69,15 +69,15 @@ fileprivate struct MotionInstance {
}
extension
UIView
{
///
Motion
Instance reference.
fileprivate
var
motionInstance
:
Motion
Instance
{
///
Associated
Instance reference.
fileprivate
var
associatedInstance
:
Associated
Instance
{
get
{
return
AssociatedObject
.
get
(
base
:
self
,
key
:
&
Motion
InstanceKey
)
{
return
Motion
Instance
(
isEnabled
:
true
,
identifier
:
nil
,
animations
:
nil
,
transitions
:
nil
,
alpha
:
1
)
return
AssociatedObject
.
get
(
base
:
self
,
key
:
&
Associated
InstanceKey
)
{
return
Associated
Instance
(
isEnabled
:
true
,
identifier
:
nil
,
animations
:
nil
,
transitions
:
nil
,
alpha
:
1
)
}
}
set
(
value
)
{
AssociatedObject
.
set
(
base
:
self
,
key
:
&
Motion
InstanceKey
,
value
:
value
)
AssociatedObject
.
set
(
base
:
self
,
key
:
&
Associated
InstanceKey
,
value
:
value
)
}
}
...
...
@@ -85,10 +85,10 @@ extension UIView {
@IBInspectable
public
var
isMotionEnabled
:
Bool
{
get
{
return
motion
Instance
.
isEnabled
return
associated
Instance
.
isEnabled
}
set
(
value
)
{
motion
Instance
.
isEnabled
=
value
associated
Instance
.
isEnabled
=
value
}
}
...
...
@@ -96,30 +96,30 @@ extension UIView {
@IBInspectable
open
var
motionIdentifier
:
String
?
{
get
{
return
motion
Instance
.
identifier
return
associated
Instance
.
identifier
}
set
(
value
)
{
motion
Instance
.
identifier
=
value
associated
Instance
.
identifier
=
value
}
}
/// The animations to run.
open
var
motionAnimations
:
[
MotionAnimation
]?
{
get
{
return
motion
Instance
.
animations
return
associated
Instance
.
animations
}
set
(
value
)
{
motion
Instance
.
animations
=
value
associated
Instance
.
animations
=
value
}
}
/// The animations to run while in transition.
open
var
motionTransitions
:
[
MotionTransition
]?
{
get
{
return
motion
Instance
.
transitions
return
associated
Instance
.
transitions
}
set
(
value
)
{
motion
Instance
.
transitions
=
value
associated
Instance
.
transitions
=
value
}
}
...
...
@@ -127,10 +127,10 @@ extension UIView {
@IBInspectable
open
var
motionAlpha
:
CGFloat
?
{
get
{
return
motion
Instance
.
alpha
return
associated
Instance
.
alpha
}
set
(
value
)
{
motion
Instance
.
alpha
=
value
associated
Instance
.
alpha
=
value
}
}
}
...
...
Sources/Extensions/Motion+UIViewController.swift
View file @
baf1bf57
This diff is collapsed.
Click to expand it.
Sources/Motion.swift
View file @
baf1bf57
...
...
@@ -62,7 +62,7 @@ public class Motion: MotionController {
/// progress of the current transition. 0 if no transition is happening
public
override
var
progress
:
Double
{
didSet
{
if
t
ransitioning
{
if
isT
ransitioning
{
transitionContext
?
.
updateInteractiveTransition
(
CGFloat
(
progress
))
}
}
...
...
@@ -70,7 +70,7 @@ public class Motion: MotionController {
public
var
isAnimating
:
Bool
=
false
/// a UIViewControllerContextTransitioning object provided by UIKit,
/// might be nil when
t
ransitioning. This happens when calling motionReplaceViewController
/// might be nil when
isT
ransitioning. This happens when calling motionReplaceViewController
internal
weak
var
transitionContext
:
UIViewControllerContextTransitioning
?
internal
var
fullScreenSnapshot
:
UIView
!
...
...
@@ -129,7 +129,7 @@ public extension Motion {
// internal methods for transition
internal
extension
Motion
{
func
start
()
{
guard
t
ransitioning
else
{
return
}
guard
isT
ransitioning
else
{
return
}
if
let
fvc
=
fromViewController
,
let
tvc
=
toViewController
{
closureProcessForMotionDelegate
(
vc
:
fvc
)
{
$0
.
motionWillStartTransition
?()
...
...
@@ -214,7 +214,7 @@ internal extension Motion {
}
override
func
complete
(
finished
:
Bool
)
{
guard
t
ransitioning
else
{
return
}
guard
isT
ransitioning
else
{
return
}
context
.
clean
()
if
finished
&&
presenting
&&
toOverFullScreen
{
...
...
@@ -304,7 +304,7 @@ internal extension Motion {
// custom transition helper, used in motion_replaceViewController
internal
extension
Motion
{
func
transition
(
from
:
UIViewController
,
to
:
UIViewController
,
in
view
:
UIView
,
completion
:
((
Bool
)
->
Void
)?
=
nil
)
{
guard
!
t
ransitioning
else
{
return
}
guard
!
isT
ransitioning
else
{
return
}
presenting
=
true
transitionContainer
=
view
fromViewController
=
from
...
...
@@ -341,7 +341,7 @@ internal extension Motion {
extension
Motion
:
UIViewControllerAnimatedTransitioning
{
public
func
animateTransition
(
using
context
:
UIViewControllerContextTransitioning
)
{
guard
!
t
ransitioning
else
{
return
}
guard
!
isT
ransitioning
else
{
return
}
transitionContext
=
context
fromViewController
=
fromViewController
??
context
.
viewController
(
forKey
:
.
from
)
toViewController
=
toViewController
??
context
.
viewController
(
forKey
:
.
to
)
...
...
Sources/MotionController.swift
View file @
baf1bf57
...
...
@@ -40,7 +40,7 @@ public class MotionController: NSObject {
/// progress of the current transition. 0 if no transition is happening
public
internal(set)
var
progress
:
Double
=
0
{
didSet
{
if
t
ransitioning
{
if
isT
ransitioning
{
if
let
progressUpdateObservers
=
progressUpdateObservers
{
for
observer
in
progressUpdateObservers
{
observer
.
motionDidUpdateProgress
(
progress
:
progress
)
...
...
@@ -61,12 +61,12 @@ public class MotionController: NSObject {
}
}
/// whether or not we are doing a transition
public
var
t
ransitioning
:
Bool
{
public
var
isT
ransitioning
:
Bool
{
return
transitionContainer
!=
nil
}
/// container we created to hold all animating views, will be a subview of the
/// transitionContainer when
t
ransitioning
/// transitionContainer when
isT
ransitioning
public
internal(set)
var
container
:
UIView
!
/// this is the container supplied by UIKit
...
...
@@ -98,7 +98,7 @@ public class MotionController: NSObject {
}
}
func
displayUpdate
(
_
link
:
CADisplayLink
)
{
if
t
ransitioning
,
duration
>
0
,
let
beginTime
=
beginTime
{
if
isT
ransitioning
,
duration
>
0
,
let
beginTime
=
beginTime
{
let
elapsedTime
=
CACurrentMediaTime
()
-
beginTime
if
elapsedTime
>
duration
{
...
...
@@ -138,7 +138,7 @@ public extension MotionController {
- progress: the current progress, must be between -1...1
*/
public
func
update
(
progress
:
Double
)
{
guard
t
ransitioning
else
{
return
}
guard
isT
ransitioning
else
{
return
}
self
.
beginTime
=
nil
self
.
progress
=
max
(
-
1
,
min
(
1
,
progress
))
}
...
...
@@ -149,7 +149,7 @@ public extension MotionController {
current state to the **end** state
*/
public
func
end
(
animate
:
Bool
=
true
)
{
guard
t
ransitioning
else
{
return
}
guard
isT
ransitioning
else
{
return
}
if
!
animate
{
self
.
complete
(
finished
:
true
)
return
...
...
@@ -167,7 +167,7 @@ public extension MotionController {
current state to the **begining** state
*/
public
func
cancel
(
animate
:
Bool
=
true
)
{
guard
t
ransitioning
else
{
return
}
guard
isT
ransitioning
else
{
return
}
if
!
animate
{
self
.
complete
(
finished
:
false
)
return
...
...
@@ -196,7 +196,7 @@ public extension MotionController {
- view: the view to override to
*/
public
func
apply
(
modifiers
:
[
MotionTransition
],
to
view
:
UIView
)
{
guard
t
ransitioning
else
{
return
}
guard
isT
ransitioning
else
{
return
}
let
targetState
=
MotionTargetState
(
modifiers
:
modifiers
)
if
let
otherView
=
self
.
context
.
pairedView
(
for
:
view
)
{
for
animator
in
self
.
animators
{
...
...
@@ -233,7 +233,7 @@ internal extension MotionController {
/// must have transitionContainer set already
/// subclass should call context.set(fromViews:toViews) after inserting fromViews & toViews into the container
func
prepareForTransition
()
{
guard
t
ransitioning
else
{
fatalError
()
}
guard
isT
ransitioning
else
{
fatalError
()
}
plugins
=
Motion
.
enabledPlugins
.
map
({
return
$0
.
init
()
})
processors
=
[
IgnoreSubviewModifiersPreprocessor
(),
...
...
@@ -273,14 +273,14 @@ internal extension MotionController {
}
func
processContext
()
{
guard
t
ransitioning
else
{
fatalError
()
}
guard
isT
ransitioning
else
{
fatalError
()
}
for
processor
in
processors
{
processor
.
process
(
fromViews
:
context
.
fromViews
,
toViews
:
context
.
toViews
)
}
}
func
prepareForAnimation
()
{
guard
t
ransitioning
else
{
fatalError
()
}
guard
isT
ransitioning
else
{
fatalError
()
}
animatingViews
=
[([
UIView
],
[
UIView
])]()
for
animator
in
animators
{
let
currentFromViews
=
context
.
fromViews
.
filter
{
(
view
:
UIView
)
->
Bool
in
...
...
@@ -296,7 +296,7 @@ internal extension MotionController {
/// Actually animate the views
/// subclass should call `prepareForTransition` & `prepareForAnimation` before calling `animate`
func
animate
()
{
guard
t
ransitioning
else
{
fatalError
()
}
guard
isT
ransitioning
else
{
fatalError
()
}
for
(
currentFromViews
,
currentToViews
)
in
animatingViews
{
// auto hide all animated views
for
view
in
currentFromViews
{
...
...
@@ -328,7 +328,7 @@ internal extension MotionController {
}
func
complete
(
after
:
TimeInterval
,
finishing
:
Bool
)
{
guard
t
ransitioning
else
{
fatalError
()
}
guard
isT
ransitioning
else
{
fatalError
()
}
if
after
<=
0.001
{
complete
(
finished
:
finishing
)
return
...
...
@@ -340,7 +340,7 @@ internal extension MotionController {
}
func
complete
(
finished
:
Bool
)
{
guard
t
ransitioning
else
{
fatalError
()
}
guard
isT
ransitioning
else
{
fatalError
()
}
for
animator
in
animators
{
animator
.
clean
()
}
...
...
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