Skip to content

Commit

Permalink
Merge pull request #12 from KittenYang/swift-2.0
Browse files Browse the repository at this point in the history
Feature added.Custom number of circle and duration of animation.
  • Loading branch information
yoavlt committed Feb 15, 2016
2 parents 3b9ba8f + b76597e commit c67fc19
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 36 deletions.
8 changes: 4 additions & 4 deletions Example/LiquidLoader/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ class ViewController: UIViewController {
let lineColor = UIColor(red: 77 / 255.0, green: 255 / 255.0, blue: 182 / 255.0, alpha: 1.0)

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))
let lineLoader = LiquidLoader(frame: lineFrame, effect: .GrowLine(lineColor,7,10.0))

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))
let circleLoader = LiquidLoader(frame: circleFrame, effect: .GrowCircle(circleColor,10,1.0))

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))
let circleMat = LiquidLoader(frame: circleMatFrame, effect: .Circle(circleMatColor,8,5.0))

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))
let lineMat = LiquidLoader(frame: lineMatFrame, effect: .Line(lineMatColor,4,1.0))

view.addSubview(lineLoader)
view.addSubview(circleLoader)
Expand Down
11 changes: 3 additions & 8 deletions Pod/Classes/LiquidCircleEffect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,9 @@ class LiquidCircleEffect : LiquidLoadEffect {
return loader!.frame.width * 0.5
}
}
let NumberOfCircles = 8

internal override init(loader: LiquidLoader, color: UIColor) {
super.init(loader: loader, color: color)
}


override func setupShape() -> [LiquittableCircle] {
return Array(0..<NumberOfCircles).map { i in
return Array(0..<numberOfCircles).map { i in
let angle = CGFloat(i) * CGFloat(2 * M_PI) / 8.0
let frame = self.loader.frame
let center = CGMath.circlePoint(frame.center.minus(frame.origin), radius: self.radius - self.circleRadius, rad: angle)
Expand All @@ -49,7 +44,7 @@ class LiquidCircleEffect : LiquidLoadEffect {
override func update() {
switch key {
case 0.0...1.0:
key += 0.006
key += 1/(duration*60)
default:
key = key - 1.0
}
Expand Down
7 changes: 3 additions & 4 deletions Pod/Classes/LiquidLineEffect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ import UIKit

class LiquidLineEffect : LiquidLoadEffect {

let NumberOfCircles = 5
var circleInter: CGFloat!

override func setupShape() -> [LiquittableCircle] {
return Array(0..<NumberOfCircles).map { i in
return Array(0..<numberOfCircles).map { i in
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,
Expand All @@ -27,7 +26,7 @@ class LiquidLineEffect : LiquidLoadEffect {
override func movePosition(key: CGFloat) -> CGPoint {
if loader != nil {
return CGPoint(
x: loader.frame.width * sineTransform(key),
x: (circles.last!.frame.rightBottom.x + circleInter) * sineTransform(key),
y: loader.frame.height * 0.5
)
} else {
Expand All @@ -42,7 +41,7 @@ class LiquidLineEffect : LiquidLoadEffect {
override func update() {
switch key {
case 0.0...2.0:
key += 0.01
key += 2.0/(duration*60)
default:
key = 0.0
}
Expand Down
6 changes: 5 additions & 1 deletion Pod/Classes/LiquidLoadEffect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import UIKit

class LiquidLoadEffect : NSObject {

var numberOfCircles: Int
var duration: CGFloat
var circleScale: CGFloat = 1.17
var moveScale: CGFloat = 0.80
var color = UIColor.whiteColor()
Expand Down Expand Up @@ -39,7 +41,9 @@ class LiquidLoadEffect : NSObject {
}
}

init(loader: LiquidLoader, color: UIColor) {
init(loader: LiquidLoader, color: UIColor, circleCount: Int, duration: CGFloat) {
self.numberOfCircles = circleCount
self.duration = duration
self.circleRadius = loader.frame.width * 0.05
self.loader = loader
self.color = color
Expand Down
27 changes: 14 additions & 13 deletions Pod/Classes/LiquidLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,28 @@ import Foundation
import UIKit

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

func setup(loader: LiquidLoader) -> LiquidLoadEffect {
switch self {
case .Line(let color):
return LiquidLineEffect(loader: loader, color: color)
case .Circle(let color):
return LiquidCircleEffect(loader: loader, color: color)
case .GrowLine(let color):
let line = LiquidLineEffect(loader: loader, color: color)
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)
line.isGrow = true
return line
case .GrowCircle(let color):
let circle = LiquidCircleEffect(loader: loader, color: color)
case .GrowCircle(let color,let count, let duration):
let circle = LiquidCircleEffect(loader: loader, color: color, circleCount: count, duration: duration)
circle.isGrow = true
return circle
}
}

}

public class LiquidLoader : UIView {
Expand All @@ -44,7 +45,7 @@ public class LiquidLoader : UIView {
}

public required init?(coder aDecoder: NSCoder) {
self.effect = .Circle(UIColor.whiteColor())
self.effect = .Circle(UIColor.whiteColor(), 5, 3.0)
super.init(coder: aDecoder)
self.effectDelegate = self.effect.setup(self)
}
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) {
@objc public convenience init(frame: CGRect, effect: ObjCEffect, color: UIColor, numberOfCircle: Int, duration: CGFloat) {
var s: Effect

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

self.init(frame: frame, effect: s)
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))
let loader = LiquidLoader(frame: loaderFrame, effect: .GrowCircle(circleColor, 10, 1.0)) //color, number of circles, duration.
view.addSubview(loader)
```

Expand Down

0 comments on commit c67fc19

Please sign in to comment.