UIControl(UIViewのサブクラス)を作成し、ビューコントローラの左側に整列すると、「beginTrackingWithTouch」が呼び出されません。ビューに触れてください。タッチを離すと呼び出されます。私がUIControlに触れると、pointInside(point:CGPoint ...)メソッドが直ちに呼び出され、さらに奇妙なのは、このUIControlビューをView Controllerの右側に配置すると、 -beginTrackingWithTouchは、ビューがタッチされると直ちに呼び出され、解放されたときは呼び出されません。さらに、beginTrackingWithTouchが呼び出されるのと同じ時間beginTrackingWithTouchが呼び出されます。いくつかのテストでは、ビューが左側から20ピクセルになるまで正常に動作しますが、この奇妙な問題が再度発生します。UIControlはVCの左側で正しく動作しません
UIControl continueTrackingWithTouchがビューコントローラの左端に配置されていると登録に失敗する理由はありますか?アップルが左手のスクロールを防止する方法ですか? UIControlをブロックしている左側には何もありません。
//In public class CustomScrollBar : UIControl
//This method gets called everytime when UIControl (red area in picture) is touched
override public func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
return CGRectContainsPoint(handleHitArea, point)
}
//Only gets called when UIControl is touched and let go. It will not get called until your finger lifts off the screen.
override public func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
self.scrollerLine.hidden = true
if let delegate = self.delegate {
delegate.beginTrackingWithTouch()
}
guard self.isHandleVisible else{
return false
}
self.lastTouchLocation = touch.locationInView(self)
self.isHandleDragged = true
self.setNeedsLayout()
return true
}
//以下の画像:UIControlビューは左側(薄い青色)です。これを右端に移動すると、メソッドは正常に登録されます。
このビューコントローラにはナビコントローラがありますか?もしそうであれば、naviコントローラはエッジジェスチャ(interactivePopGestureRecognizer)を持っています。 – zylenv