Commit 3fe5ad8d by Daniel Dahan

development: added zPosition to MotionAnimation

parent 66a43476
...@@ -30,46 +30,6 @@ ...@@ -30,46 +30,6 @@
import UIKit import UIKit
/// A memory reference to the MotionIdentifier instance for UIView extensions.
fileprivate var MotionIdentifierKey: UInt8 = 0
fileprivate struct MotionTransitionItem {
fileprivate var identifier: String
fileprivate var animations: [MotionAnimation]
}
extension UIView {
/// MaterialLayer Reference.
fileprivate var motionTransitionItem: MotionTransitionItem {
get {
return AssociatedObject(base: self, key: &MotionIdentifierKey) {
return MotionTransitionItem(identifier: "", animations: [])
}
}
set(value) {
AssociateObject(base: self, key: &MotionIdentifierKey, value: value)
}
}
open var motionIdentifier: String {
get {
return motionTransitionItem.identifier
}
set(value) {
motionTransitionItem.identifier = value
}
}
open var motionAnimations: [MotionAnimation] {
get {
return motionTransitionItem.animations
}
set(value) {
motionTransitionItem.animations = value
}
}
}
@objc(MotionAnimationFillMode) @objc(MotionAnimationFillMode)
public enum MotionAnimationFillMode: Int { public enum MotionAnimationFillMode: Int {
case forwards case forwards
......
...@@ -49,6 +49,7 @@ public enum MotionAnimationKeyPath: String { ...@@ -49,6 +49,7 @@ public enum MotionAnimationKeyPath: String {
case position case position
case shadowPath case shadowPath
case opacity case opacity
case zPosition
} }
public enum MotionAnimation { public enum MotionAnimation {
...@@ -75,6 +76,7 @@ public enum MotionAnimation { ...@@ -75,6 +76,7 @@ public enum MotionAnimation {
case position(x: CGFloat, y: CGFloat) case position(x: CGFloat, y: CGFloat)
case shadow(path: CGPath) case shadow(path: CGPath)
case fade(CGFloat) case fade(CGFloat)
case zPosition(Int)
} }
extension CALayer { extension CALayer {
...@@ -216,6 +218,10 @@ extension CALayer { ...@@ -216,6 +218,10 @@ extension CALayer {
let fade = Motion.fade(opacity: opacity) let fade = Motion.fade(opacity: opacity)
fade.fromValue = value(forKey: MotionAnimationKeyPath.opacity.rawValue) ?? NSNumber(floatLiteral: 1) fade.fromValue = value(forKey: MotionAnimationKeyPath.opacity.rawValue) ?? NSNumber(floatLiteral: 1)
a.append(fade) a.append(fade)
case let .zPosition(index):
let zPosition = Motion.zPosition(index: index)
zPosition.fromValue = value(forKey: MotionAnimationKeyPath.zPosition.rawValue) ?? NSNumber(integerLiteral: 0)
a.append(zPosition)
} }
} }
...@@ -362,17 +368,6 @@ extension CABasicAnimation { ...@@ -362,17 +368,6 @@ extension CABasicAnimation {
extension Motion { extension Motion {
/** /**
Creates a CABasicAnimation for the opacity key path.
- Parameter opacity: A CGFloat.
- Returns: A CABasicAnimation.
*/
public static func fade(opacity: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .opacity)
animation.toValue = NSNumber(floatLiteral: Double(opacity))
return animation
}
/**
Creates a CABasicAnimation for the backgroundColor key path. Creates a CABasicAnimation for the backgroundColor key path.
- Parameter color: A UIColor. - Parameter color: A UIColor.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
...@@ -454,7 +449,7 @@ extension Motion { ...@@ -454,7 +449,7 @@ extension Motion {
- Parameter rotations: An optional CGFloat. - Parameter rotations: An optional CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func spin(rotations: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func spin(rotations: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .rotation) let animation = CABasicAnimation(keyPath: .rotation)
animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber
return animation return animation
...@@ -465,7 +460,7 @@ extension Motion { ...@@ -465,7 +460,7 @@ extension Motion {
- Parameter rotations: An optional CGFloat. - Parameter rotations: An optional CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func spinX(rotations: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func spinX(rotations: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .rotationX) let animation = CABasicAnimation(keyPath: .rotationX)
animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber
return animation return animation
...@@ -476,7 +471,7 @@ extension Motion { ...@@ -476,7 +471,7 @@ extension Motion {
- Parameter rotations: An optional CGFloat. - Parameter rotations: An optional CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func spinY(rotations: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func spinY(rotations: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .rotationY) let animation = CABasicAnimation(keyPath: .rotationY)
animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber
return animation return animation
...@@ -487,7 +482,7 @@ extension Motion { ...@@ -487,7 +482,7 @@ extension Motion {
- Parameter rotations: An optional CGFloat. - Parameter rotations: An optional CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func spinZ(rotations: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func spinZ(rotations: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .rotationZ) let animation = CABasicAnimation(keyPath: .rotationZ)
animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber animation.toValue = (CGFloat(M_PI * 2) * rotations) as NSNumber
return animation return animation
...@@ -498,7 +493,7 @@ extension Motion { ...@@ -498,7 +493,7 @@ extension Motion {
- Parameter to scale: A CGFloat. - Parameter to scale: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func scale(to scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scale(to scale: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .scale) let animation = CABasicAnimation(keyPath: .scale)
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
return animation return animation
...@@ -509,7 +504,7 @@ extension Motion { ...@@ -509,7 +504,7 @@ extension Motion {
- Parameter to scale: A CGFloat. - Parameter to scale: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func scaleX(to scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scaleX(to scale: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .scaleX) let animation = CABasicAnimation(keyPath: .scaleX)
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
return animation return animation
...@@ -520,7 +515,7 @@ extension Motion { ...@@ -520,7 +515,7 @@ extension Motion {
- Parameter to scale: A CGFloat. - Parameter to scale: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func scaleY(to scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scaleY(to scale: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .scaleY) let animation = CABasicAnimation(keyPath: .scaleY)
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
return animation return animation
...@@ -531,7 +526,7 @@ extension Motion { ...@@ -531,7 +526,7 @@ extension Motion {
- Parameter to scale: A CGFloat. - Parameter to scale: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func scaleZ(to scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scaleZ(to scale: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .scaleZ) let animation = CABasicAnimation(keyPath: .scaleZ)
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
return animation return animation
...@@ -542,7 +537,7 @@ extension Motion { ...@@ -542,7 +537,7 @@ extension Motion {
- Parameter point: A CGPoint. - Parameter point: A CGPoint.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func translate(to point: CGPoint, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translate(to point: CGPoint) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .translation) let animation = CABasicAnimation(keyPath: .translation)
animation.toValue = NSValue(cgPoint: point) animation.toValue = NSValue(cgPoint: point)
return animation return animation
...@@ -553,7 +548,7 @@ extension Motion { ...@@ -553,7 +548,7 @@ extension Motion {
- Parameter to translation: A CGFloat. - Parameter to translation: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func translateX(to translation: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translateX(to translation: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .translationX) let animation = CABasicAnimation(keyPath: .translationX)
animation.toValue = translation as NSNumber animation.toValue = translation as NSNumber
return animation return animation
...@@ -564,7 +559,7 @@ extension Motion { ...@@ -564,7 +559,7 @@ extension Motion {
- Parameter to translation: A CGFloat. - Parameter to translation: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func translateY(to translation: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translateY(to translation: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .translationY) let animation = CABasicAnimation(keyPath: .translationY)
animation.toValue = translation as NSNumber animation.toValue = translation as NSNumber
return animation return animation
...@@ -575,7 +570,7 @@ extension Motion { ...@@ -575,7 +570,7 @@ extension Motion {
- Parameter to translation: A CGFloat. - Parameter to translation: A CGFloat.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func translateZ(to translation: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translateZ(to translation: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .translationZ) let animation = CABasicAnimation(keyPath: .translationZ)
animation.toValue = translation as NSNumber animation.toValue = translation as NSNumber
return animation return animation
...@@ -586,7 +581,7 @@ extension Motion { ...@@ -586,7 +581,7 @@ extension Motion {
- Parameter to point: A CGPoint. - Parameter to point: A CGPoint.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func position(to point: CGPoint, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func position(to point: CGPoint) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .position) let animation = CABasicAnimation(keyPath: .position)
animation.toValue = NSValue(cgPoint: point) animation.toValue = NSValue(cgPoint: point)
return animation return animation
...@@ -594,12 +589,34 @@ extension Motion { ...@@ -594,12 +589,34 @@ extension Motion {
/** /**
Creates a CABasicAnimation for the shadowPath key path. Creates a CABasicAnimation for the shadowPath key path.
- Parameter to path: A CGPath. - Parameter path: A CGPath.
- Returns: A CABasicAnimation. - Returns: A CABasicAnimation.
*/ */
public static func shadow(path: CGPath, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func shadow(path: CGPath) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .shadowPath) let animation = CABasicAnimation(keyPath: .shadowPath)
animation.toValue = path animation.toValue = path
return animation return animation
} }
/**
Creates a CABasicAnimation for the opacity key path.
- Parameter opacity: A CGFloat.
- Returns: A CABasicAnimation.
*/
public static func fade(opacity: CGFloat) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .opacity)
animation.toValue = NSNumber(floatLiteral: Double(opacity))
return animation
}
/**
Creates a CABasicaAnimation for the zPosition key path.
- Parameter index: An Int.
- Returns: A CABasicAnimation.
*/
public static func zPosition(index: Int) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: .zPosition)
animation.toValue = NSNumber(integerLiteral: index)
return animation
}
} }
...@@ -30,6 +30,46 @@ ...@@ -30,6 +30,46 @@
import UIKit import UIKit
/// A memory reference to the MotionIdentifier instance for UIView extensions.
fileprivate var MotionIdentifierKey: UInt8 = 0
fileprivate struct MotionTransitionItem {
fileprivate var identifier: String
fileprivate var animations: [MotionAnimation]
}
extension UIView {
/// MaterialLayer Reference.
fileprivate var motionTransitionItem: MotionTransitionItem {
get {
return AssociatedObject(base: self, key: &MotionIdentifierKey) {
return MotionTransitionItem(identifier: "", animations: [])
}
}
set(value) {
AssociateObject(base: self, key: &MotionIdentifierKey, value: value)
}
}
open var motionIdentifier: String {
get {
return motionTransitionItem.identifier
}
set(value) {
motionTransitionItem.identifier = value
}
}
open var motionAnimations: [MotionAnimation] {
get {
return motionTransitionItem.animations
}
set(value) {
motionTransitionItem.animations = value
}
}
}
@objc(MotionTransition) @objc(MotionTransition)
public enum MotionTransition: Int { public enum MotionTransition: Int {
case none case none
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment