Commit 503d3ba7 by Daniel Dahan

fixed shadow rotation issue

parent e4a4f114
...@@ -156,14 +156,14 @@ extension FeedViewController: MaterialCollectionViewDataSource { ...@@ -156,14 +156,14 @@ extension FeedViewController: MaterialCollectionViewDataSource {
var cardView: CardView? = c.contentView.subviews.first as? CardView var cardView: CardView? = c.contentView.subviews.first as? CardView
// Only build the template if the cardView doesn't exist. // Only build the template if the CardView doesn't exist.
if nil == cardView { if nil == cardView {
// CardView template example.
cardView = CardView() cardView = CardView()
c.backgroundColor = nil
c.pulseColor = nil
c.contentView.addSubview(cardView!) c.contentView.addSubview(cardView!)
cardView!.pulseColor = nil
cardView!.pulseScale = false cardView!.pulseScale = false
cardView!.divider = false cardView!.divider = false
cardView!.depth = .None cardView!.depth = .None
...@@ -197,7 +197,6 @@ extension FeedViewController: MaterialCollectionViewDataSource { ...@@ -197,7 +197,6 @@ extension FeedViewController: MaterialCollectionViewDataSource {
} }
cardView!.frame = c.bounds cardView!.frame = c.bounds
} }
return c return c
......
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'Material' s.name = 'Material'
s.version = '1.34.8' s.version = '1.34.9'
s.license = 'BSD' s.license = 'BSD'
s.summary = 'Express your creativity with Material, an animation and graphics framework for Google\'s Material Design and Apple\'s Flat UI in Swift.' s.summary = 'Express your creativity with Material, an animation and graphics framework for Google\'s Material Design and Apple\'s Flat UI in Swift.'
s.homepage = 'http://cosmicmind.io' s.homepage = 'http://cosmicmind.io'
......
...@@ -405,9 +405,10 @@ public class CardView : MaterialPulseView { ...@@ -405,9 +405,10 @@ public class CardView : MaterialPulseView {
*/ */
public override func prepareView() { public override func prepareView() {
super.prepareView() super.prepareView()
pulseColor = MaterialColor.blueGrey.lighten4 pulseColor = MaterialColor.grey.lighten1
depth = .Depth1 depth = .Depth1
dividerColor = MaterialColor.blueGrey.lighten5 dividerColor = MaterialColor.grey.lighten3
cornerRadiusPreset = .Radius1
} }
/** /**
......
...@@ -125,7 +125,6 @@ public class ControlView : MaterialView { ...@@ -125,7 +125,6 @@ public class ControlView : MaterialView {
/// Reloads the view. /// Reloads the view.
public func reloadView() { public func reloadView() {
// clear constraints so new ones do not conflict // clear constraints so new ones do not conflict
removeConstraints(constraints) removeConstraints(constraints)
for v in subviews { for v in subviews {
...@@ -133,7 +132,7 @@ public class ControlView : MaterialView { ...@@ -133,7 +132,7 @@ public class ControlView : MaterialView {
v.removeFromSuperview() v.removeFromSuperview()
} }
} }
if 0 < width {
// Size of single grid column. // Size of single grid column.
if let g: CGFloat = width / CGFloat(0 < grid.axis.columns ? grid.axis.columns : 1) { if let g: CGFloat = width / CGFloat(0 < grid.axis.columns ? grid.axis.columns : 1) {
grid.views = [] grid.views = []
...@@ -177,6 +176,7 @@ public class ControlView : MaterialView { ...@@ -177,6 +176,7 @@ public class ControlView : MaterialView {
contentView.grid.reloadLayout() contentView.grid.reloadLayout()
} }
} }
}
/** /**
Prepares the view instance when intialized. When subclassing, Prepares the view instance when intialized. When subclassing,
......
...@@ -543,9 +543,10 @@ public class ImageCardView : MaterialPulseView { ...@@ -543,9 +543,10 @@ public class ImageCardView : MaterialPulseView {
*/ */
public override func prepareView() { public override func prepareView() {
super.prepareView() super.prepareView()
pulseColor = MaterialColor.blueGrey.lighten4 pulseColor = MaterialColor.grey.lighten1
depth = .Depth1 depth = .Depth1
dividerColor = MaterialColor.blueGrey.lighten5 dividerColor = MaterialColor.grey.lighten3
cornerRadiusPreset = .Radius1
} }
/** /**
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.34.8</string> <string>1.34.9</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
......
...@@ -34,256 +34,218 @@ public extension MaterialAnimation { ...@@ -34,256 +34,218 @@ public extension MaterialAnimation {
/** /**
:name: backgroundColor :name: backgroundColor
*/ */
public static func backgroundColor(color: UIColor, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func backgroundColor(color: UIColor, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "backgroundColor")
animation.keyPath = "backgroundColor"
animation.toValue = color.CGColor animation.toValue = color.CGColor
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: cornerRadius :name: cornerRadius
*/ */
public static func cornerRadius(radius: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func cornerRadius(radius: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "cornerRadius")
animation.keyPath = "cornerRadius"
animation.toValue = radius animation.toValue = radius
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: translation :name: translation
*/ */
public static func transform(transform: CATransform3D, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func transform(transform: CATransform3D, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform")
animation.keyPath = "transform"
animation.toValue = NSValue(CATransform3D: transform) animation.toValue = NSValue(CATransform3D: transform)
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: rotate :name: rotate
*/ */
public static func rotate(rotations: Double = 1, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func rotate(rotations: Double = 1, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation")
animation.keyPath = "transform.rotation"
animation.byValue = (M_PI * 2 * rotations) as NSNumber animation.byValue = (M_PI * 2 * rotations) as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: rotateX :name: rotateX
*/ */
public static func rotateX(rotations: Double = 1, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func rotateX(rotations: Double = 1, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.x")
animation.keyPath = "transform.rotation.x"
animation.byValue = (M_PI_4 * rotations) as NSNumber animation.byValue = (M_PI_4 * rotations) as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: rotateY :name: rotateY
*/ */
public static func rotateY(rotations: Double = 1, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func rotateY(rotations: Double = 1, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.y")
animation.keyPath = "transform.rotation.y"
animation.byValue = (M_PI_4 * rotations) as NSNumber animation.byValue = (M_PI_4 * rotations) as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: rotateZ :name: rotateZ
*/ */
public static func rotateZ(rotations: Double = 1, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func rotateZ(rotations: Double = 1, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.keyPath = "transform.rotation.z"
animation.byValue = (M_PI_4 * rotations) as NSNumber animation.byValue = (M_PI_4 * rotations) as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: scale :name: scale
*/ */
public static func scale(scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scale(scale: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.scale")
animation.keyPath = "transform.scale"
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: scaleX :name: scaleX
*/ */
public static func scaleX(scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scaleX(scale: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.scale.x")
animation.keyPath = "transform.scale.x"
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: scaleY :name: scaleY
*/ */
public static func scaleY(scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scaleY(scale: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.scale.y")
animation.keyPath = "transform.scale.y"
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: scaleZ :name: scaleZ
*/ */
public static func scaleZ(scale: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func scaleZ(scale: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.scale.z")
animation.keyPath = "transform.scale.z"
animation.toValue = scale as NSNumber animation.toValue = scale as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: translate :name: translate
*/ */
public static func translate(translation: CGSize, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translate(translation: CGSize, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.translation")
animation.keyPath = "transform.translation"
animation.toValue = NSValue(CGSize: translation) animation.toValue = NSValue(CGSize: translation)
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: translateX :name: translateX
*/ */
public static func translateX(translation: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translateX(translation: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.translation.x")
animation.keyPath = "transform.translation.x"
animation.toValue = translation as NSNumber animation.toValue = translation as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: translateY :name: translateY
*/ */
public static func translateY(translation: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translateY(translation: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.translation.y")
animation.keyPath = "transform.translation.y"
animation.toValue = translation as NSNumber animation.toValue = translation as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: translateZ :name: translateZ
*/ */
public static func translateZ(translation: CGFloat, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func translateZ(translation: CGFloat, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.translation.z")
animation.keyPath = "transform.translation.z"
animation.toValue = translation as NSNumber animation.toValue = translation as NSNumber
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
/** /**
:name: position :name: position
*/ */
public static func position(point: CGPoint, duration: CFTimeInterval? = nil) -> CABasicAnimation { public static func position(point: CGPoint, duration: CFTimeInterval = 0.25) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation() let animation: CABasicAnimation = CABasicAnimation(keyPath: "position")
animation.keyPath = "position"
animation.toValue = NSValue(CGPoint: point) animation.toValue = NSValue(CGPoint: point)
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards) animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
if let d: CFTimeInterval = duration { animation.duration = duration
animation.duration = d return animation
} }
public static func shadowPath(path: CGPath, duration: CFTimeInterval = 0) -> CABasicAnimation {
let animation: CABasicAnimation = CABasicAnimation(keyPath: "shadowPath")
animation.toValue = path
animation.fillMode = MaterialAnimationFillModeToValue(.Forwards)
animation.removedOnCompletion = false
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
animation.duration = duration
return animation return animation
} }
} }
\ No newline at end of file
...@@ -453,7 +453,13 @@ public class MaterialButton : UIButton { ...@@ -453,7 +453,13 @@ public class MaterialButton : UIButton {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
layer.shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
layer.shadowPath = nil
} else if nil == layer.shadowPath {
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
/** /**
......
...@@ -507,7 +507,13 @@ public class MaterialCollectionViewCell : UICollectionViewCell { ...@@ -507,7 +507,13 @@ public class MaterialCollectionViewCell : UICollectionViewCell {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
layer.shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
layer.shadowPath = nil
} else if nil == layer.shadowPath {
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
/** /**
......
...@@ -56,14 +56,12 @@ public extension MaterialAnimation { ...@@ -56,14 +56,12 @@ public extension MaterialAnimation {
/** /**
:name: path :name: path
*/ */
public static func path(bezierPath: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval? = nil) -> CAKeyframeAnimation { public static func path(bezierPath: UIBezierPath, mode: MaterialAnimationRotationMode = .Auto, duration: CFTimeInterval = 0.25) -> CAKeyframeAnimation {
let animation: CAKeyframeAnimation = CAKeyframeAnimation() let animation: CAKeyframeAnimation = CAKeyframeAnimation()
animation.keyPath = "position" animation.keyPath = "position"
animation.path = bezierPath.CGPath animation.path = bezierPath.CGPath
animation.rotationMode = MaterialAnimationRotationModeToValue(mode) animation.rotationMode = MaterialAnimationRotationModeToValue(mode)
if let d = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
} }
\ No newline at end of file
...@@ -331,6 +331,12 @@ public class MaterialLayer : CAShapeLayer { ...@@ -331,6 +331,12 @@ public class MaterialLayer : CAShapeLayer {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
shadowPath = nil
} else if nil == shadowPath {
shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
} }
...@@ -406,7 +406,13 @@ public class MaterialTableViewCell: UITableViewCell { ...@@ -406,7 +406,13 @@ public class MaterialTableViewCell: UITableViewCell {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
layer.shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
layer.shadowPath = nil
} else if nil == layer.shadowPath {
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
/** /**
......
...@@ -83,15 +83,13 @@ public extension MaterialAnimation { ...@@ -83,15 +83,13 @@ public extension MaterialAnimation {
/** /**
:name: transition :name: transition
*/ */
public static func transition(type: MaterialAnimationTransition, direction: MaterialAnimationTransitionSubType? = nil, duration: CFTimeInterval? = nil) -> CATransition { public static func transition(type: MaterialAnimationTransition, direction: MaterialAnimationTransitionSubType? = nil, duration: CFTimeInterval = 0.25) -> CATransition {
let animation: CATransition = CATransition() let animation: CATransition = CATransition()
animation.type = MaterialAnimationTransitionToValue(type) animation.type = MaterialAnimationTransitionToValue(type)
if let d = direction { if let d = direction {
animation.subtype = MaterialAnimationTransitionSubTypeToValue(d) animation.subtype = MaterialAnimationTransitionSubTypeToValue(d)
} }
if let d = duration { animation.duration = duration
animation.duration = d
}
return animation return animation
} }
} }
\ No newline at end of file
...@@ -446,6 +446,12 @@ public class MaterialView : UIView { ...@@ -446,6 +446,12 @@ public class MaterialView : UIView {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
layer.shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
layer.shadowPath = nil
} else if nil == layer.shadowPath {
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
} }
...@@ -58,8 +58,8 @@ public class StatusBarView : ControlView { ...@@ -58,8 +58,8 @@ public class StatusBarView : ControlView {
public override func layoutSubviews() { public override func layoutSubviews() {
super.layoutSubviews() super.layoutSubviews()
width = UIScreen.mainScreen().bounds.width width = UIScreen.mainScreen().bounds.width
grid.axis.columns = Int(width / 48) grid.axis.columns = Int(width / 48)
// General alignment. // General alignment.
...@@ -74,10 +74,10 @@ public class StatusBarView : ControlView { ...@@ -74,10 +74,10 @@ public class StatusBarView : ControlView {
reloadView() reloadView()
if frame.origin.x != oldFrame!.origin.x || frame.origin.y != oldFrame!.origin.y || frame.width != oldFrame!.width || frame.height != oldFrame!.height { if frame.origin.x != oldFrame!.origin.x || frame.origin.y != oldFrame!.origin.y || frame.width != oldFrame!.width || frame.height != oldFrame!.height {
oldFrame = frame
if nil != delegate { if nil != delegate {
statusBarViewDidChangeLayout() statusBarViewDidChangeLayout()
} }
oldFrame = frame
} }
} }
......
...@@ -555,7 +555,13 @@ public class TextField : UITextField { ...@@ -555,7 +555,13 @@ public class TextField : UITextField {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
layer.shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
layer.shadowPath = nil
} else if nil == layer.shadowPath {
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
/// Prepares the titleLabel property. /// Prepares the titleLabel property.
......
...@@ -470,7 +470,13 @@ public class TextView: UITextView { ...@@ -470,7 +470,13 @@ public class TextView: UITextView {
/// Sets the shadow path. /// Sets the shadow path.
internal func layoutShadowPath() { internal func layoutShadowPath() {
layer.shadowPath = .None == depth ? nil : UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath if .None == self.depth {
layer.shadowPath = nil
} else if nil == layer.shadowPath {
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath
} else {
animate(MaterialAnimation.shadowPath(UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).CGPath, duration: 0))
}
} }
/** /**
......
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