@@ -55,6 +55,10 @@ public class MIDITimeTablePlayheadView: UIView {
55
55
private var imageView : UIImageView ?
56
56
/// Delegate of playhead.
57
57
public weak var delegate : MIDITimeTablePlayheadViewDelegate ?
58
+ /// The view for panning.
59
+ private var panningView = UIView ( )
60
+ /// The hit are offset for panning.
61
+ public var panningOffset : CGFloat = 20
58
62
59
63
// MARK: Init
60
64
@@ -73,7 +77,8 @@ public class MIDITimeTablePlayheadView: UIView {
73
77
}
74
78
75
79
private func commonInit( ) {
76
- addGestureRecognizer ( UIPanGestureRecognizer ( target: self , action: #selector( didPan ( pan: ) ) ) )
80
+ panningView. addGestureRecognizer ( UIPanGestureRecognizer ( target: self , action: #selector( didPan ( pan: ) ) ) )
81
+ addSubview ( panningView)
77
82
layer. addSublayer ( lineLayer)
78
83
layer. addSublayer ( shapeLayer)
79
84
}
@@ -82,6 +87,7 @@ public class MIDITimeTablePlayheadView: UIView {
82
87
83
88
public override func layoutSubviews( ) {
84
89
super. layoutSubviews ( )
90
+ panningView. frame = CGRect ( x: - panningOffset, y: - panningOffset, width: frame. size. width + ( panningOffset * 2 ) , height: frame. size. height + ( panningOffset * 2 ) )
85
91
lineLayer. frame. size = CGSize ( width: lineWidth, height: lineHeight + ( frame. height / 2 ) )
86
92
lineLayer. frame. origin. y = frame. height - ( frame. height / 2 )
87
93
lineLayer. position. x = frame. width / 2
@@ -91,6 +97,21 @@ public class MIDITimeTablePlayheadView: UIView {
91
97
drawShapeLayer ( )
92
98
}
93
99
100
+ public override func hitTest( _ point: CGPoint , with event: UIEvent ? ) -> UIView ? {
101
+ if clipsToBounds || isHidden || alpha == 0 {
102
+ return nil
103
+ }
104
+
105
+ for subview in subviews. reversed ( ) {
106
+ let subPoint = subview. convert ( point, from: self )
107
+ if let result = subview. hitTest ( subPoint, with: event) {
108
+ return result
109
+ }
110
+ }
111
+
112
+ return nil
113
+ }
114
+
94
115
private func updatePosition( ) {
95
116
frame = CGRect (
96
117
x: rowHeaderWidth + ( CGFloat ( position) * measureBeatWidth) - ( frame. size. width / 2 ) ,
0 commit comments