@@ -40,19 +40,21 @@ private let TwinkleLayerMinificationFilter = "trilinear"
40
40
/// ✨ Twinkle, a Swift and easy way to make any UIView twinkle.
41
41
public class Twinkle {
42
42
43
-
44
43
/// Casts a spell on the provided view allowing it to twinkle.
45
44
///
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 ) {
48
50
var twinkleLayers : [ TwinkleLayer ] = [ ]
49
51
50
52
let upperBound : UInt32 = 10
51
53
let lowerBound : UInt32 = 5
52
54
let count : UInt = UInt ( arc4random_uniform ( upperBound) + lowerBound)
53
55
54
56
for i in 0 ..< count {
55
- let twinkleLayer : TwinkleLayer = TwinkleLayer ( )
57
+ let twinkleLayer : TwinkleLayer = image == nil ? TwinkleLayer ( ) : TwinkleLayer ( image : image! )
56
58
let x : Int = Int ( arc4random_uniform ( UInt32 ( view. layer. bounds. size. width) ) )
57
59
let y : Int = Int ( arc4random_uniform ( UInt32 ( view. layer. bounds. size. height) ) )
58
60
twinkleLayer. position = CGPoint ( x: CGFloat ( x) , y: CGFloat ( y) )
@@ -76,6 +78,11 @@ internal class TwinkleLayer: CAEmitterLayer {
76
78
77
79
// MARK: object lifecycle
78
80
81
+ internal convenience init ( image: UIImage ) {
82
+ self . init ( )
83
+ self . commonInit ( image)
84
+ }
85
+
79
86
internal override init ( ) {
80
87
super. init ( )
81
88
self . commonInit ( )
@@ -97,6 +104,8 @@ internal class TwinkleLayer: CAEmitterLayer {
97
104
}
98
105
}
99
106
107
+ self . emitterCells? . removeAll ( )
108
+
100
109
let emitterCells : [ CAEmitterCell ] = [ CAEmitterCell ( ) , CAEmitterCell ( ) ]
101
110
for cell in emitterCells {
102
111
cell. birthRate = 8
@@ -117,6 +126,7 @@ internal class TwinkleLayer: CAEmitterLayer {
117
126
cell. minificationFilter = TwinkleLayerMinificationFilter
118
127
cell. isEnabled = true
119
128
}
129
+
120
130
self . emitterCells = emitterCells
121
131
self . emitterPosition = CGPoint ( x: ( bounds. size. width * 0.5 ) , y: ( bounds. size. height * 0.5 ) )
122
132
self . emitterSize = bounds. size
0 commit comments