UIControl 触摸 VC 左侧的行为不正确
UIControl touches not behaving correctly on left side of VC
我有一个 UIControl(UIView 的子类),当我创建它并将其与视图控制器中的左侧对齐时,"beginTrackingWithTouch" 在我触摸视图时无法被调用。只有当我释放触摸时它才会被调用。奇怪的是当我触摸 UIControl 时 pointInside(point: CGPoint...) 方法被立即调用,更奇怪的是当我将这个 UIControl 视图对齐到视图控制器的右侧时,它工作正常 - -beginTrackingWithTouch 在触摸视图时立即调用,而不是在释放时调用。此外,在调用 endTrackingWithTouch 的同时调用了 beginTrackingWithTouch。通过一些测试,它工作正常,直到视图距离左侧 20 px,然后再次出现这个奇怪的问题。
如果将 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 视图在左侧(浅蓝色)。如果我把它移到最右边,方法就可以正常注册。
导航控制器有一个内置的后退手势识别器,将其设置为 false。确保在 viewDidAppear
中设置了它
self.navigationController!.interactivePopGestureRecognizer!.enabled = false
我有一个 UIControl(UIView 的子类),当我创建它并将其与视图控制器中的左侧对齐时,"beginTrackingWithTouch" 在我触摸视图时无法被调用。只有当我释放触摸时它才会被调用。奇怪的是当我触摸 UIControl 时 pointInside(point: CGPoint...) 方法被立即调用,更奇怪的是当我将这个 UIControl 视图对齐到视图控制器的右侧时,它工作正常 - -beginTrackingWithTouch 在触摸视图时立即调用,而不是在释放时调用。此外,在调用 endTrackingWithTouch 的同时调用了 beginTrackingWithTouch。通过一些测试,它工作正常,直到视图距离左侧 20 px,然后再次出现这个奇怪的问题。
如果将 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 视图在左侧(浅蓝色)。如果我把它移到最右边,方法就可以正常注册。
导航控制器有一个内置的后退手势识别器,将其设置为 false。确保在 viewDidAppear
中设置了它self.navigationController!.interactivePopGestureRecognizer!.enabled = false