Skip to content

Commit

Permalink
Merge pull request #13 from alupattelli/swift-2.0
Browse files Browse the repository at this point in the history
Added ability to customize grow color
  • Loading branch information
yoavlt committed Feb 16, 2016
2 parents c67fc19 + abb33b7 commit 0edf8f9
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 32 deletions.
9 changes: 5 additions & 4 deletions Example/LiquidLoader/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,22 @@ class ViewController: UIViewController {
self.view.backgroundColor = UIColor(red: 9 / 255.0, green: 21 / 255.0, blue: 37 / 255.0, alpha: 1.0)

let lineColor = UIColor(red: 77 / 255.0, green: 255 / 255.0, blue: 182 / 255.0, alpha: 1.0)
let growColor = UIColor.redColor()

let lineFrame = CGRect(x: self.view.frame.width * 0.5 - 100, y: 100, width: 200, height: 100)
let lineLoader = LiquidLoader(frame: lineFrame, effect: .GrowLine(lineColor,7,10.0))
let lineLoader = LiquidLoader(frame: lineFrame, effect: .GrowLine(lineColor,7,10.0, growColor))

let circleFrame = CGRect(x: self.view.frame.width * 0.5 - 100, y: 200, width: 200, height: 200)
let circleColor = UIColor(red: 77 / 255.0, green: 182 / 255.0, blue: 255 / 255.0, alpha: 1.0)
let circleLoader = LiquidLoader(frame: circleFrame, effect: .GrowCircle(circleColor,10,1.0))
let circleLoader = LiquidLoader(frame: circleFrame, effect: .GrowCircle(circleColor,10,1.0, growColor))

let circleMatColor = UIColor(red: 255 / 255.0, green: 188 / 255.0, blue: 188 / 255.0, alpha: 1.0)
let circleMatFrame = CGRect(x: self.view.frame.width * 0.5 - 25, y: 450, width: 50, height: 50)
let circleMat = LiquidLoader(frame: circleMatFrame, effect: .Circle(circleMatColor,8,5.0))
let circleMat = LiquidLoader(frame: circleMatFrame, effect: .Circle(circleMatColor,8,5.0, growColor))

let lineMatColor = UIColor(red: 255 / 255.0, green: 255 / 255.0, blue: 188 / 255.0, alpha: 1.0)
let lineMatFrame = CGRect(x: self.view.frame.width * 0.5 - 25, y: 500, width: 50, height: 50)
let lineMat = LiquidLoader(frame: lineMatFrame, effect: .Line(lineMatColor,4,1.0))
let lineMat = LiquidLoader(frame: lineMatFrame, effect: .Line(lineMatColor,4,1.0, growColor))

view.addSubview(lineLoader)
view.addSubview(circleLoader)
Expand Down
5 changes: 3 additions & 2 deletions Pod/Classes/LiquidCircleEffect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ class LiquidCircleEffect : LiquidLoadEffect {
return LiquittableCircle(
center: center,
radius: self.circleRadius,
color: self.color
color: self.color,
growColor: self.growColor
)
}
}
Expand Down Expand Up @@ -55,7 +56,7 @@ class LiquidCircleEffect : LiquidLoadEffect {
self.circleScale = 1.10
self.engine = SimpleCircleLiquidEngine(radiusThresh: self.circleRadius * 0.85, angleThresh: 0.5)
let moveCircleRadius = circleRadius * moveScale
moveCircle = LiquittableCircle(center: movePosition(0.0), radius: moveCircleRadius, color: self.color)
moveCircle = LiquittableCircle(center: movePosition(0.0), radius: moveCircleRadius, color: self.color, growColor: self.growColor)
}

override func resize() {
Expand Down
5 changes: 3 additions & 2 deletions Pod/Classes/LiquidLineEffect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class LiquidLineEffect : LiquidLoadEffect {
return LiquittableCircle(
center: CGPoint(x: self.circleInter + self.circleRadius + CGFloat(i) * (self.circleInter + 2 * self.circleRadius), y: self.loader.frame.height * 0.5),
radius: self.circleRadius,
color: self.color
color: self.color,
growColor: self.growColor
)
}
}
Expand Down Expand Up @@ -54,7 +55,7 @@ class LiquidLineEffect : LiquidLoadEffect {
self.circleInter = (loader.frame.width - 2 * circleRadius * 5) / 6
self.engine = SimpleCircleLiquidEngine(radiusThresh: self.circleRadius, angleThresh: 0.2)
let moveCircleRadius = circleRadius * moveScale
self.moveCircle = LiquittableCircle(center: CGPoint(x: 0, y: loader.frame.height * 0.5), radius: moveCircleRadius, color: color)
self.moveCircle = LiquittableCircle(center: CGPoint(x: 0, y: loader.frame.height * 0.5), radius: moveCircleRadius, color: color, growColor: growColor)
}

override func resize() {
Expand Down
8 changes: 6 additions & 2 deletions Pod/Classes/LiquidLoadEffect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class LiquidLoadEffect : NSObject {
var circleScale: CGFloat = 1.17
var moveScale: CGFloat = 0.80
var color = UIColor.whiteColor()
var growColor = UIColor.redColor()

var engine: SimpleCircleLiquidEngine?
var moveCircle: LiquittableCircle?
Expand All @@ -41,12 +42,15 @@ class LiquidLoadEffect : NSObject {
}
}

init(loader: LiquidLoader, color: UIColor, circleCount: Int, duration: CGFloat) {
init(loader: LiquidLoader, color: UIColor, circleCount: Int, duration: CGFloat, growColor: UIColor? = UIColor.redColor()) {
self.numberOfCircles = circleCount
self.duration = duration
self.circleRadius = loader.frame.width * 0.05
self.loader = loader
self.color = color
if growColor != nil {
self.growColor = growColor!
}
super.init()
setup()
}
Expand Down Expand Up @@ -115,7 +119,7 @@ class LiquidLoadEffect : NSObject {

func grow(isGrow: Bool) {
if isGrow {
shadowCircle = LiquittableCircle(center: self.moveCircle!.center, radius: self.moveCircle!.radius * 1.0, color: self.color)
shadowCircle = LiquittableCircle(center: self.moveCircle!.center, radius: self.moveCircle!.radius * 1.0, color: self.color, growColor: growColor)
shadowCircle?.isGrow = isGrow
loader?.addSubview(shadowCircle!)
} else {
Expand Down
26 changes: 13 additions & 13 deletions Pod/Classes/LiquidLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@ import Foundation
import UIKit

public enum Effect {
case Line(UIColor,Int,CGFloat)
case Circle(UIColor,Int,CGFloat)
case GrowLine(UIColor,Int,CGFloat)
case GrowCircle(UIColor,Int,CGFloat)
case Line(UIColor, Int, CGFloat, UIColor?)
case Circle(UIColor, Int, CGFloat, UIColor?)
case GrowLine(UIColor, Int, CGFloat, UIColor?)
case GrowCircle(UIColor, Int, CGFloat, UIColor?)

func setup(loader: LiquidLoader) -> LiquidLoadEffect {
switch self {
case .Line(let color, let count, let duration):
return LiquidLineEffect(loader: loader, color: color, circleCount: count, duration: duration)
case .Circle(let color, let count, let duration):
return LiquidCircleEffect(loader: loader, color: color, circleCount: count, duration: duration)
case .GrowLine(let color, let count, let duration):
let line = LiquidLineEffect(loader: loader, color: color, circleCount: count, duration: duration)
case .Line(let color, let count, let duration, let growColor):
return LiquidLineEffect(loader: loader, color: color, circleCount: count, duration: duration, growColor: growColor)
case .Circle(let color, let count, let duration, let growColor):
return LiquidCircleEffect(loader: loader, color: color, circleCount: count, duration: duration, growColor: growColor)
case .GrowLine(let color, let count, let duration, let growColor):
let line = LiquidLineEffect(loader: loader, color: color, circleCount: count, duration: duration, growColor: growColor)
line.isGrow = true
return line
case .GrowCircle(let color,let count, let duration):
let circle = LiquidCircleEffect(loader: loader, color: color, circleCount: count, duration: duration)
case .GrowCircle(let color,let count, let duration, let growColor):
let circle = LiquidCircleEffect(loader: loader, color: color, circleCount: count, duration: duration, growColor: growColor)
circle.isGrow = true
return circle
}
Expand All @@ -45,7 +45,7 @@ public class LiquidLoader : UIView {
}

public required init?(coder aDecoder: NSCoder) {
self.effect = .Circle(UIColor.whiteColor(), 5, 3.0)
self.effect = .Circle(UIColor.whiteColor(), 5, 3.0, UIColor.redColor())
super.init(coder: aDecoder)
self.effectDelegate = self.effect.setup(self)
}
Expand Down
8 changes: 6 additions & 2 deletions Pod/Classes/LiquittableCircle.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,15 @@ class LiquittableCircle : UIView {
}
}
var color: UIColor = UIColor.redColor()
var growColor: UIColor = UIColor.whiteColor()

init(center: CGPoint, radius: CGFloat, color: UIColor) {
init(center: CGPoint, radius: CGFloat, color: UIColor, growColor: UIColor?) {
let frame = CGRect(x: center.x - radius, y: center.y - radius, width: 2 * radius, height: 2 * radius)
self.radius = radius
self.color = color
if growColor != nil {
self.growColor = growColor!
}
super.init(frame: frame)
setup()
}
Expand Down Expand Up @@ -61,7 +65,7 @@ class LiquittableCircle : UIView {

func grow(isGrow: Bool) {
if isGrow {
grow(self.color, radius: self.radius, shininess: 1.6)
grow(self.growColor, radius: self.radius, shininess: 1.6)
} else {
self.layer.shadowRadius = 0
self.layer.shadowOpacity = 0
Expand Down
10 changes: 5 additions & 5 deletions Pod/Classes/ObjC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,17 @@ import UIKit

extension LiquidLoader {

@objc public convenience init(frame: CGRect, effect: ObjCEffect, color: UIColor, numberOfCircle: Int, duration: CGFloat) {
@objc public convenience init(frame: CGRect, effect: ObjCEffect, color: UIColor, numberOfCircle: Int, duration: CGFloat, growColor: UIColor? = UIColor.redColor()) {
var s: Effect

if effect == .Line {
s = Effect.Line(color, numberOfCircle, duration)
s = Effect.Line(color, numberOfCircle, duration, growColor)
} else if effect == .Circle {
s = Effect.Circle(color, numberOfCircle, duration)
s = Effect.Circle(color, numberOfCircle, duration, growColor)
} else if effect == .GrowLine {
s = Effect.GrowLine(color, numberOfCircle, duration)
s = Effect.GrowLine(color, numberOfCircle, duration, growColor)
} else { //if effect == .GrowCircle {
s = Effect.GrowCircle(color, numberOfCircle, duration)
s = Effect.GrowCircle(color, numberOfCircle, duration, growColor)
}

self.init(frame: frame, effect: s)
Expand Down
2 changes: 1 addition & 1 deletion Pod/Classes/UIView+Grow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import UIKit

extension UIView {
func grow(baseColor: UIColor, radius: CGFloat, shininess: CGFloat) {
let growColor = UIColor(red: 0 / 255.0, green: 1, blue: 1, alpha: 1.0)
let growColor = baseColor//UIColor(red: 0 / 255.0, green: 1, blue: 1, alpha: 1.0)
growShadow(radius, growColor: growColor, shininess: shininess)
let circle = CAShapeLayer()
circle.path = UIBezierPath(ovalInRect: CGRect(x: 0, y: 0, width: radius * 2.0, height: radius * 2.0)).CGPath
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ LiquidLoader is the spinner loader UI components with liquid animation, inspired
## Usage

```swift
let loader = LiquidLoader(frame: loaderFrame, effect: .GrowCircle(circleColor, 10, 1.0)) //color, number of circles, duration.
let loader = LiquidLoader(frame: loaderFrame, effect: .GrowCircle(circleColor, 10, 1.0, , growColor)) //color, number of circles, duration, growColor.
view.addSubview(loader)
```

Expand Down

0 comments on commit 0edf8f9

Please sign in to comment.