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