Skip to content

Commit 98a9abf

Browse files
committed
Twinkle, add support for custom images
#5
1 parent 3fc34cd commit 98a9abf

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

Sources/Twinkle.swift

+14-4
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,21 @@ private let TwinkleLayerMinificationFilter = "trilinear"
4040
/// ✨ Twinkle, a Swift and easy way to make any UIView twinkle.
4141
public class Twinkle {
4242

43-
4443
/// Casts a spell on the provided view allowing it to twinkle.
4544
///
46-
/// - Parameter view: UIView that will twinkle
47-
public class func twinkle(_ view: UIView) {
45+
/// - Parameters:
46+
/// - view: UIView that will twinkle
47+
/// - image: Optional twinkle image
48+
/// - color: Optional color for the default twinkle image
49+
public class func twinkle(_ view: UIView, image: UIImage? = nil) {
4850
var twinkleLayers: [TwinkleLayer] = []
4951

5052
let upperBound: UInt32 = 10
5153
let lowerBound: UInt32 = 5
5254
let count: UInt = UInt(arc4random_uniform(upperBound) + lowerBound)
5355

5456
for i in 0..<count {
55-
let twinkleLayer: TwinkleLayer = TwinkleLayer()
57+
let twinkleLayer: TwinkleLayer = image == nil ? TwinkleLayer() : TwinkleLayer(image: image!)
5658
let x: Int = Int(arc4random_uniform(UInt32(view.layer.bounds.size.width)))
5759
let y: Int = Int(arc4random_uniform(UInt32(view.layer.bounds.size.height)))
5860
twinkleLayer.position = CGPoint(x: CGFloat(x), y: CGFloat(y))
@@ -76,6 +78,11 @@ internal class TwinkleLayer: CAEmitterLayer {
7678

7779
// MARK: object lifecycle
7880

81+
internal convenience init(image: UIImage) {
82+
self.init()
83+
self.commonInit(image)
84+
}
85+
7986
internal override init() {
8087
super.init()
8188
self.commonInit()
@@ -97,6 +104,8 @@ internal class TwinkleLayer: CAEmitterLayer {
97104
}
98105
}
99106

107+
self.emitterCells?.removeAll()
108+
100109
let emitterCells: [CAEmitterCell] = [CAEmitterCell(), CAEmitterCell()]
101110
for cell in emitterCells {
102111
cell.birthRate = 8
@@ -117,6 +126,7 @@ internal class TwinkleLayer: CAEmitterLayer {
117126
cell.minificationFilter = TwinkleLayerMinificationFilter
118127
cell.isEnabled = true
119128
}
129+
120130
self.emitterCells = emitterCells
121131
self.emitterPosition = CGPoint(x: (bounds.size.width * 0.5), y: (bounds.size.height * 0.5))
122132
self.emitterSize = bounds.size

0 commit comments

Comments
 (0)