@@ -13,6 +13,12 @@ public class AudioVisualizationView: BaseNibView {
13
13
case read
14
14
case write
15
15
}
16
+
17
+ private enum LevelBarType {
18
+ case upper
19
+ case lower
20
+ case single
21
+ }
16
22
17
23
@IBInspectable public var meteringLevelBarWidth : CGFloat = 3.0 {
18
24
didSet {
@@ -29,6 +35,11 @@ public class AudioVisualizationView: BaseNibView {
29
35
self . setNeedsDisplay ( )
30
36
}
31
37
}
38
+ @IBInspectable public var meteringLevelBarSingleStick : Bool = false {
39
+ didSet {
40
+ self . setNeedsDisplay ( )
41
+ }
42
+ }
32
43
33
44
public var audioVisualizationMode : AudioVisualizationMode = . read
34
45
@@ -294,27 +305,37 @@ public class AudioVisualizationView: BaseNibView {
294
305
let offset = max ( self . currentMeteringLevelsArray. count - self . maximumNumberBars, 0 )
295
306
296
307
for index in offset..< self . currentMeteringLevelsArray. count {
297
- self . drawBar ( index - offset, meteringLevelIndex: index, isUpperBar: true , context: context)
298
- self . drawBar ( index - offset, meteringLevelIndex: index, isUpperBar: false , context: context)
308
+ if self . meteringLevelBarSingleStick {
309
+ self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . single, context: context)
310
+ } else {
311
+ self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . upper, context: context)
312
+ self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . lower, context: context)
313
+ }
299
314
}
300
315
}
301
316
302
- private func drawBar( _ barIndex: Int , meteringLevelIndex: Int , isUpperBar : Bool , context: CGContext ) {
317
+ private func drawBar( _ barIndex: Int , meteringLevelIndex: Int , levelBarType : LevelBarType , context: CGContext ) {
303
318
context. saveGState ( )
304
319
305
- var barPath : UIBezierPath !
320
+ var barRect : CGRect
306
321
307
322
let xPointForMeteringLevel = self . xPointForMeteringLevel ( barIndex)
308
323
let heightForMeteringLevel = self . heightForMeteringLevel ( self . currentMeteringLevelsArray [ meteringLevelIndex] )
309
324
310
- if isUpperBar {
311
- barPath = UIBezierPath ( roundedRect: CGRect ( x: xPointForMeteringLevel, y: self . centerY - heightForMeteringLevel,
312
- width: self . meteringLevelBarWidth, height: heightForMeteringLevel) , cornerRadius: self . meteringLevelBarCornerRadius)
313
- } else {
314
- barPath = UIBezierPath ( roundedRect: CGRect ( x: xPointForMeteringLevel, y: self . centerY, width: self . meteringLevelBarWidth,
315
- height: heightForMeteringLevel) , cornerRadius: self . meteringLevelBarCornerRadius)
316
- }
317
-
325
+ switch levelBarType {
326
+ case . upper:
327
+ barRect = CGRect ( x: xPointForMeteringLevel, y: self . centerY - heightForMeteringLevel,
328
+ width: self . meteringLevelBarWidth, height: heightForMeteringLevel)
329
+ case . lower:
330
+ barRect = CGRect ( x: xPointForMeteringLevel, y: self . centerY, width: self . meteringLevelBarWidth,
331
+ height: heightForMeteringLevel)
332
+ case . single:
333
+ barRect = CGRect ( x: xPointForMeteringLevel, y: self . centerY - heightForMeteringLevel,
334
+ width: self . meteringLevelBarWidth, height: heightForMeteringLevel * 2 )
335
+ }
336
+
337
+ let barPath : UIBezierPath = UIBezierPath ( roundedRect: barRect, cornerRadius: self . meteringLevelBarCornerRadius)
338
+
318
339
UIColor . black. set ( )
319
340
barPath. fill ( )
320
341
0 commit comments