Commit 3ddfac11 by Daniel Dahan

updated Animation components and included scale

parent a202a838
...@@ -55,13 +55,10 @@ public struct MaterialAnimation { ...@@ -55,13 +55,10 @@ public struct MaterialAnimation {
CATransaction.begin() CATransaction.begin()
CATransaction.setDisableActions(true) CATransaction.setDisableActions(true)
CATransaction.setCompletionBlock(completion) CATransaction.setCompletionBlock(completion)
if let v = animation.toValue { layer.setValue(nil == animation.toValue ? animation.byValue : animation.toValue, forKey: animation.keyPath!)
layer.setValue(v, forKey: animation.keyPath!)
} else if let v = animation.byValue {
layer.setValue(v, forKey: animation.keyPath!)
}
CATransaction.commit() CATransaction.commit()
layer.addAnimation(animation, forKey: nil) layer.addAnimation(animation, forKey: animation.keyPath!)
animation.delegate = self as? AnyObject
} }
/** /**
...@@ -69,7 +66,10 @@ public struct MaterialAnimation { ...@@ -69,7 +66,10 @@ public struct MaterialAnimation {
*/ */
internal static func applyKeyframeAnimation(animation: CAKeyframeAnimation, toLayer layer: CALayer) { internal static func applyKeyframeAnimation(animation: CAKeyframeAnimation, toLayer layer: CALayer) {
// use presentation layer if available // use presentation layer if available
(nil == layer.presentationLayer() ? layer : layer.presentationLayer() as! CALayer).addAnimation(animation, forKey: nil) (nil == layer.presentationLayer() ? layer : layer.presentationLayer() as! CALayer).addAnimation(animation, forKey: animation.keyPath!)
}
internal func animationDidStop(anim: CAAnimation, finished flag: Bool) {
print("HERE")
} }
} }
...@@ -46,79 +46,79 @@ public extension MaterialAnimation { ...@@ -46,79 +46,79 @@ public extension MaterialAnimation {
} }
/** /**
:name: rotationAnimation :name: cornerRadiusAnimation
*/ */
public static func rotationAnimation(rotations: Int = 1) -> CABasicAnimation { public static func cornerRadiusAnimation(radius: CGFloat) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "transform.rotation" animation.keyPath = "cornerRadius"
animation.byValue = M_PI * 2 * Double(rotations) animation.toValue = radius
return animation return animation
} }
/** /**
:name: rotation :name: cornerRadius
*/ */
public static func rotation(view: UIView, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) { public static func cornerRadius(view: UIView, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
rotation(view.layer, rotations: rotations, duration: duration, completion: completion) cornerRadius(view.layer, radius: radius, duration: duration, completion: completion)
} }
/** /**
:name: rotation :name: cornerRadius
*/ */
public static func rotation(layer: CALayer, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) { public static func cornerRadius(layer: CALayer, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = rotationAnimation(rotations) let animation: CABasicAnimation = cornerRadiusAnimation(radius)
animation.duration = duration animation.duration = duration
applyBasicAnimation(animation, toLayer: layer, completion: completion) applyBasicAnimation(animation, toLayer: layer, completion: completion)
} }
/** /**
:name: transformAnimation :name: rotationAnimation
*/ */
public static func transformAnimation(scale: CATransform3D) -> CABasicAnimation { public static func rotationAnimation(rotations: Int = 1) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "transform" animation.keyPath = "transform.rotation"
animation.toValue = NSValue(CATransform3D: scale) animation.byValue = M_PI * 2 * Double(rotations)
return animation return animation
} }
/** /**
:name: transform :name: rotation
*/ */
public static func transform(view: UIView, rotations: Int = 1, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) { public static func rotation(view: UIView, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) {
rotation(view.layer, rotations: rotations, duration: duration, completion: completion) rotation(view.layer, rotations: rotations, duration: duration, completion: completion)
} }
/** /**
:name: transform :name: rotation
*/ */
public static func transform(layer: CALayer, scale: CATransform3D, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) { public static func rotation(layer: CALayer, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = transformAnimation(scale) let animation: CABasicAnimation = rotationAnimation(rotations)
animation.duration = duration animation.duration = duration
applyBasicAnimation(animation, toLayer: layer, completion: completion) applyBasicAnimation(animation, toLayer: layer, completion: completion)
} }
/** /**
:name: cornerRadiusAnimation :name: scaleAnimation
*/ */
public static func cornerRadiusAnimation(radius: CGFloat) -> CABasicAnimation { public static func scaleAnimation(transform: CATransform3D) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "cornerRadius" animation.keyPath = "transform.scale"
animation.toValue = radius animation.toValue = NSValue(CATransform3D: transform)
return animation return animation
} }
/** /**
:name: cornerRadius :name: scale
*/ */
public static func cornerRadius(view: UIView, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) { public static func scale(view: UIView, transform: CATransform3D, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
cornerRadius(view.layer, radius: radius, duration: duration, completion: completion) scale(view.layer, transform: transform, duration: duration, completion: completion)
} }
/** /**
:name: cornerRadius :name: scale
*/ */
public static func cornerRadius(layer: CALayer, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) { public static func scale(layer: CALayer, transform: CATransform3D, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = cornerRadiusAnimation(radius) let animation: CABasicAnimation = scaleAnimation(transform)
animation.duration = duration animation.duration = duration
applyBasicAnimation(animation, toLayer: layer, completion: completion) applyBasicAnimation(animation, toLayer: layer, completion: completion)
} }
......
...@@ -222,6 +222,18 @@ public class MaterialButton : UIButton { ...@@ -222,6 +222,18 @@ public class MaterialButton : UIButton {
} }
/** /**
:name: position
*/
public var position: CGPoint {
get {
return layer.position
}
set(value) {
layer.position = value
}
}
/**
:name: zPosition :name: zPosition
*/ */
public var zPosition: CGFloat! { public var zPosition: CGFloat! {
...@@ -297,8 +309,8 @@ public class MaterialButton : UIButton { ...@@ -297,8 +309,8 @@ public class MaterialButton : UIButton {
}) })
pulseLayer.hidden = false pulseLayer.hidden = false
MaterialAnimation.transform(pulseLayer, scale: CATransform3DMakeScale(3, 3, 3)) pulseLayer.transform = CATransform3DMakeScale(3, 3, 3)
MaterialAnimation.transform(layer, scale: CATransform3DMakeScale(1.05, 1.05, 1.05)) layer.transform = CATransform3DMakeScale(1.05, 1.05, 1.05)
} }
/** /**
...@@ -363,7 +375,7 @@ public class MaterialButton : UIButton { ...@@ -363,7 +375,7 @@ public class MaterialButton : UIButton {
// //
internal func shrink() { internal func shrink() {
pulseLayer.hidden = true pulseLayer.hidden = true
MaterialAnimation.transform(pulseLayer, scale: CATransform3DIdentity) pulseLayer.transform = CATransform3DIdentity
MaterialAnimation.transform(layer, scale: CATransform3DIdentity) layer.transform = CATransform3DIdentity
} }
} }
\ No newline at end of file
...@@ -42,28 +42,28 @@ public func MaterialAnimationRotationModeToValue(mode: MaterialAnimationRotation ...@@ -42,28 +42,28 @@ public func MaterialAnimationRotationModeToValue(mode: MaterialAnimationRotation
public extension MaterialAnimation { public extension MaterialAnimation {
/** /**
:name: positionAnimation :name: path
*/ */
public static func positionAnimation(path: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto) -> CAKeyframeAnimation { public static func pathAnimation(bezierPath: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto) -> CAKeyframeAnimation {
let animation: CAKeyframeAnimation = CAKeyframeAnimation() let animation: CAKeyframeAnimation = CAKeyframeAnimation()
animation.keyPath = "position" animation.keyPath = "position"
animation.path = path.CGPath animation.path = bezierPath.CGPath
animation.rotationMode = MaterialAnimationRotationModeToValue(mode) animation.rotationMode = MaterialAnimationRotationModeToValue(mode)
return animation return animation
} }
/** /**
:name: position :name: path
*/ */
public static func position(view: UIView, path: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 1) { public static func path(view: UIView, bezierPath: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 1) {
position(view.layer, path: path, mode: mode, duration: duration) path(view.layer, bezierPath: bezierPath, mode: mode, duration: duration)
} }
/** /**
:name: position :name: path
*/ */
public static func position(layer: CALayer, path: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 1) { public static func path(layer: CALayer, bezierPath: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 1) {
let animation: CAKeyframeAnimation = positionAnimation(path, mode: mode) let animation: CAKeyframeAnimation = pathAnimation(bezierPath, mode: mode)
animation.duration = duration animation.duration = duration
applyKeyframeAnimation(animation, toLayer: layer) applyKeyframeAnimation(animation, toLayer: layer)
} }
......
...@@ -80,8 +80,8 @@ public class MaterialPulseView : MaterialView { ...@@ -80,8 +80,8 @@ public class MaterialPulseView : MaterialView {
}) })
pulseLayer.hidden = false pulseLayer.hidden = false
MaterialAnimation.transform(pulseLayer, scale: CATransform3DMakeScale(3, 3, 3)) pulseLayer.transform = CATransform3DMakeScale(3, 3, 3)
MaterialAnimation.transform(layer, scale: CATransform3DMakeScale(1.05, 1.05, 1.05)) layer.transform = CATransform3DMakeScale(1.05, 1.05, 1.05)
} }
/** /**
...@@ -151,7 +151,7 @@ public class MaterialPulseView : MaterialView { ...@@ -151,7 +151,7 @@ public class MaterialPulseView : MaterialView {
// //
internal func shrink() { internal func shrink() {
pulseLayer.hidden = true pulseLayer.hidden = true
MaterialAnimation.transform(pulseLayer, scale: CATransform3DIdentity) pulseLayer.transform = CATransform3DIdentity
MaterialAnimation.transform(layer, scale: CATransform3DIdentity) layer.transform = CATransform3DIdentity
} }
} }
...@@ -238,6 +238,18 @@ public class MaterialView : UIView { ...@@ -238,6 +238,18 @@ public class MaterialView : UIView {
} }
/** /**
:name: position
*/
public var position: CGPoint {
get {
return layer.position
}
set(value) {
layer.position = value
}
}
/**
:name: zPosition :name: zPosition
*/ */
public var zPosition: CGFloat! { public var zPosition: CGFloat! {
......
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