Skip to content

Commit

Permalink
Speed up button animation and removed shadows
Browse files Browse the repository at this point in the history
  • Loading branch information
Paolo Tagliani committed Feb 15, 2019
1 parent 76bf645 commit 1667818
Show file tree
Hide file tree
Showing 2 changed files with 559 additions and 16 deletions.
39 changes: 23 additions & 16 deletions Pod/Classes/LiquidFloatingActionButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ open class LiquidFloatingActionButton : UIView {
baseView.animateStyle = animateStyle
}
}
open var enableShadow = true {
open var enableShadow = false {
didSet {
setNeedsDisplay()
}
Expand Down Expand Up @@ -152,7 +152,7 @@ open class LiquidFloatingActionButton : UIView {

// draw plus shape
let plusLayer = CAShapeLayer()
plusLayer.lineCap = kCALineCapRound
plusLayer.lineCap = CAShapeLayerLineCap.round
plusLayer.strokeColor = UIColor.white.cgColor
plusLayer.lineWidth = 3.0

Expand Down Expand Up @@ -263,19 +263,19 @@ class ActionBarBaseView : UIView {
func translateY(_ layer: CALayer, duration: CFTimeInterval, f: (CABasicAnimation) -> ()) {
let translate = CABasicAnimation(keyPath: "transform.translation.y")
f(translate)
translate.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
translate.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
translate.isRemovedOnCompletion = false
translate.fillMode = kCAFillModeForwards
translate.fillMode = CAMediaTimingFillMode.forwards
translate.duration = duration
layer.add(translate, forKey: "transYAnim")
}
}

class CircleLiquidBaseView : ActionBarBaseView {

let openDuration: CGFloat = 0.6
let closeDuration: CGFloat = 0.2
let viscosity: CGFloat = 0.65
let openDuration: CGFloat = 0.2
let closeDuration: CGFloat = 0.15
let viscosity: CGFloat = 0.50
var animateStyle: LiquidFloatingActionButtonAnimateStyle = .up
var color: UIColor = UIColor(red: 82 / 255.0, green: 112 / 255.0, blue: 235 / 255.0, alpha: 1.0) {
didSet {
Expand All @@ -287,7 +287,10 @@ class CircleLiquidBaseView : ActionBarBaseView {
var baseLiquid: LiquittableCircle?
var engine: SimpleCircleLiquidEngine?
var bigEngine: SimpleCircleLiquidEngine?
var enableShadow = true
var enableShadow = false {
didSet {
}
}

fileprivate var openingCells: [LiquidFloatingCell] = []
fileprivate var keyDuration: CGFloat = 0
Expand All @@ -300,8 +303,8 @@ class CircleLiquidBaseView : ActionBarBaseView {
let radius = min(self.frame.width, self.frame.height) * 0.5
self.engine = SimpleCircleLiquidEngine(radiusThresh: radius * 0.73, angleThresh: 0.45)
engine?.viscosity = viscosity
self.bigEngine = SimpleCircleLiquidEngine(radiusThresh: radius, angleThresh: 0.55)
bigEngine?.viscosity = viscosity
// self.bigEngine = SimpleCircleLiquidEngine(radiusThresh: radius, angleThresh: 0.55)
// bigEngine?.viscosity = viscosity
self.engine?.color = actionButton.color
self.bigEngine?.color = actionButton.color

Expand All @@ -317,11 +320,13 @@ class CircleLiquidBaseView : ActionBarBaseView {
func open(_ cells: [LiquidFloatingCell]) {
stop()
displayLink = CADisplayLink(target: self, selector: #selector(CircleLiquidBaseView.didDisplayRefresh(_:)))
displayLink?.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
displayLink?.add(to: RunLoop.current, forMode: RunLoop.Mode.common)
opening = true
for cell in cells {
cell.layer.removeAllAnimations()
cell.layer.eraseShadow()
if enableShadow {
cell.layer.eraseShadow()
}
openingCells.append(cell)
}
}
Expand All @@ -330,10 +335,12 @@ class CircleLiquidBaseView : ActionBarBaseView {
stop()
opening = false
displayLink = CADisplayLink(target: self, selector: #selector(CircleLiquidBaseView.didDisplayRefresh(_:)))
displayLink?.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
displayLink?.add(to: RunLoop.current, forMode: RunLoop.Mode.common)
for cell in cells {
cell.layer.removeAllAnimations()
cell.layer.eraseShadow()
if enableShadow {
cell.layer.eraseShadow()
}
openingCells.append(cell)
cell.isUserInteractionEnabled = false
}
Expand Down Expand Up @@ -438,7 +445,7 @@ class CircleLiquidBaseView : ActionBarBaseView {
return -1 * t * (t - 2)
}

func didDisplayRefresh(_ displayLink: CADisplayLink) {
@objc func didDisplayRefresh(_ displayLink: CADisplayLink) {
if opening {
keyDuration += CGFloat(displayLink.duration)
updateOpen()
Expand Down Expand Up @@ -490,7 +497,7 @@ open class LiquidFloatingCell : LiquittableCircle {
}

func setup(_ image: UIImage, tintColor: UIColor = UIColor.white) {
imageView.image = image.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
imageView.image = image.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
imageView.tintColor = tintColor
setupView(imageView)
}
Expand Down
Loading

0 comments on commit 1667818

Please sign in to comment.