Commit a202a838 by Daniel Dahan

Animation Group added

parent b5cecbfc
......@@ -30,9 +30,26 @@ public struct MaterialAnimation {
}
/**
:name: groupAnimation
*/
public static func groupAnimation(view: UIView, animations: Array<CAAnimation>, duration: NSTimeInterval = 0.5) {
return groupAnimation(view.layer, animations: animations, duration: duration)
}
/**
:name: groupAnimation
*/
public static func groupAnimation(layer: CALayer, animations: Array<CAAnimation>, duration: NSTimeInterval = 0.5) {
let group: CAAnimationGroup = CAAnimationGroup()
group.animations = animations
group.duration = duration
layer.addAnimation(group, forKey: nil)
}
/**
:name: applyBasicAnimation
*/
public static func applyBasicAnimation(animation: CABasicAnimation, toLayer layer: CALayer, completion: (() -> Void)? = nil) {
internal static func applyBasicAnimation(animation: CABasicAnimation, toLayer layer: CALayer, completion: (() -> Void)? = nil) {
// use presentation layer if available
animation.fromValue = (nil == layer.presentationLayer() ? layer : layer.presentationLayer() as! CALayer).valueForKeyPath(animation.keyPath!)
CATransaction.begin()
......@@ -50,8 +67,9 @@ public struct MaterialAnimation {
/**
:name: applyKeyframeAnimation
*/
public static func applyKeyframeAnimation(animation: CAKeyframeAnimation, toLayer layer: CALayer, completion: (() -> Void)? = nil) {
internal static func applyKeyframeAnimation(animation: CAKeyframeAnimation, toLayer layer: CALayer) {
// use presentation layer if available
(nil == layer.presentationLayer() ? layer : layer.presentationLayer() as! CALayer).addAnimation(animation, forKey: nil)
}
}
......@@ -20,53 +20,106 @@ import UIKit
public extension MaterialAnimation {
/**
:name: backgroundColor
:name: backgroundColorAnimation
*/
public static func backgroundColor(layer: CALayer, color: UIColor, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
public static func backgroundColorAnimation(color: UIColor) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "backgroundColor"
animation.duration = duration
animation.toValue = color.CGColor
applyBasicAnimation(animation, toLayer: layer, completion: completion)
return animation
}
/**
:name: rotate
:name: backgroundColor
*/
public static func rotate(view: UIView, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) {
rotate(view.layer, rotations: rotations, duration: duration, completion: completion)
public static func backgroundColor(view: UIView, color: UIColor, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
backgroundColor(view.layer, color: color, duration: duration, completion: completion)
}
/**
:name: backgroundColor
*/
public static func backgroundColor(layer: CALayer, color: UIColor, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = backgroundColorAnimation(color)
animation.duration = duration
applyBasicAnimation(animation, toLayer: layer, completion: completion)
}
/**
:name: rotate
:name: rotationAnimation
*/
public static func rotate(layer: CALayer, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) {
public static func rotationAnimation(rotations: Int = 1) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "transform.rotation"
animation.duration = duration
animation.byValue = M_PI * 2 * Double(rotations)
return animation
}
/**
:name: rotation
*/
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)
}
/**
:name: rotation
*/
public static func rotation(layer: CALayer, rotations: Int = 1, duration: CFTimeInterval = 0.5, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = rotationAnimation(rotations)
animation.duration = duration
applyBasicAnimation(animation, toLayer: layer, completion: completion)
}
/**
:name: transform
:name: transformAnimation
*/
public static func transform(layer: CALayer, scale: CATransform3D, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
public static func transformAnimation(scale: CATransform3D) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "transform"
animation.duration = duration
animation.toValue = NSValue(CATransform3D: scale)
return animation
}
/**
:name: transform
*/
public static func transform(view: UIView, rotations: Int = 1, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
rotation(view.layer, rotations: rotations, duration: duration, completion: completion)
}
/**
:name: transform
*/
public static func transform(layer: CALayer, scale: CATransform3D, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = transformAnimation(scale)
animation.duration = duration
applyBasicAnimation(animation, toLayer: layer, completion: completion)
}
/**
:name: cornerRadius
:name: cornerRadiusAnimation
*/
public static func cornerRadius(layer: CALayer, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
public static func cornerRadiusAnimation(radius: CGFloat) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation()
animation.keyPath = "cornerRadius"
animation.toValue = radius
return animation
}
/**
:name: cornerRadius
*/
public static func cornerRadius(view: UIView, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
cornerRadius(view.layer, radius: radius, duration: duration, completion: completion)
}
/**
:name: cornerRadius
*/
public static func cornerRadius(layer: CALayer, radius: CGFloat, duration: CFTimeInterval = 0.25, completion: (() -> Void)? = nil) {
let animation: CABasicAnimation = cornerRadiusAnimation(radius)
animation.duration = duration
animation.byValue = radius
applyBasicAnimation(animation, toLayer: layer, completion: completion)
}
}
\ No newline at end of file
......@@ -42,32 +42,29 @@ public func MaterialAnimationRotationModeToValue(mode: MaterialAnimationRotation
public extension MaterialAnimation {
/**
:name: positionAnimation
*/
public static func positionAnimation(path: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto) -> CAKeyframeAnimation {
let animation: CAKeyframeAnimation = CAKeyframeAnimation()
animation.keyPath = "position"
animation.path = path.CGPath
animation.rotationMode = MaterialAnimationRotationModeToValue(mode)
return animation
}
/**
:name: position
*/
public static func position(
view: UIView,
path: UIBezierPath,
mode: MaterialAnimationRotationMode = .Auto,
duration: CFTimeInterval = 1,
completion: (() -> Void)? = nil) {
position(view.layer, path: path, mode: mode, duration: duration, completion: completion)
public static func position(view: UIView, path: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 1) {
position(view.layer, path: path, mode: mode, duration: duration)
}
/**
:name: position
*/
public static func position(
layer: CALayer,
path: UIBezierPath,
mode: MaterialAnimationRotationMode = .Auto,
duration: CFTimeInterval = 1,
completion: (() -> Void)? = nil) {
let animation: CAKeyframeAnimation = CAKeyframeAnimation()
animation.keyPath = "position"
public static func position(layer: CALayer, path: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 1) {
let animation: CAKeyframeAnimation = positionAnimation(path, mode: mode)
animation.duration = duration
animation.path = path.CGPath
animation.rotationMode = MaterialAnimationRotationModeToValue(mode)
applyKeyframeAnimation(animation, toLayer: layer)
}
}
\ No newline at end of file
......@@ -80,8 +80,8 @@ public class MaterialPulseView : MaterialView {
})
pulseLayer.hidden = false
pulseLayer.transform = CATransform3DMakeScale(3, 3, 3)
layer.transform = CATransform3DMakeScale(1.05, 1.05, 1.05)
MaterialAnimation.transform(pulseLayer, scale: CATransform3DMakeScale(3, 3, 3))
MaterialAnimation.transform(layer, scale: CATransform3DMakeScale(1.05, 1.05, 1.05))
}
/**
......@@ -151,7 +151,7 @@ public class MaterialPulseView : MaterialView {
//
internal func shrink() {
pulseLayer.hidden = true
pulseLayer.transform = CATransform3DIdentity
layer.transform = CATransform3DIdentity
MaterialAnimation.transform(pulseLayer, scale: CATransform3DIdentity)
MaterialAnimation.transform(layer, scale: CATransform3DIdentity)
}
}
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