【问题标题】:UIControl touches not behaving correctly on left side of VCUIControl 触摸在 VC 左侧的行为不正确
【发布时间】:2016-07-28 02:08:26
【问题描述】:

我有一个 UIControl(UIView 的子类),当我创建它并将其与视图控制器的左侧对齐时,当我触摸视图时,无法调用“beginTrackingWithTouch”。只有当我释放触摸时它才会被调用。奇怪的是,当我触摸 UIControl 时,pointInside(point: CGPoint...) 方法会立即被调用,更奇怪的是,当我在视图控制器的右侧对齐这个 UIControl 视图时,它工作得很好—— -beginTrackingWithTouch 在视图被触摸时立即调用,而不是在释放时。此外,在调用 endTrackingWithTouch 的同时调用 beginTrackingWithTouch。通过一些测试,它可以正常工作,直到视图距离左侧20 px,然后再次出现这个奇怪的问题。

如果将 UIControl continueTrackingWithTouch 放在视图控制器的最左侧,是否有原因导致无法注册?这是Apple防止左手滚动的方式吗?左侧绝对没有任何东西阻止 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 视图在左侧(浅蓝色)。如果我把它移到最右边,方法注册得很好。

【问题讨论】:

  • 这个视图控制器有导航控制器吗?如果有,则导航控制器有一个边缘手势(interactivePopGestureRecognizer),这可能会导致您的控件禁用。

标签: ios uitouch


【解决方案1】:

导航控制器有一个内置的后退手势识别器,将其设置为 false。确保它在 viewDidAppear 中设置

self.navigationController!.interactivePopGestureRecognizer!.enabled = false

【讨论】:

  • 是的,谢谢!我在 ViewDidLoad 中有它。
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多