【问题标题】:How to use touchesBegan again after touchesEndedtouchesEnded 后如何使用 touchesBegan
【发布时间】:2019-11-10 14:20:35
【问题描述】:

我的代码结果是在我已经画线之后,它会检测到正确或错误的位置并显示结果,但是在我已经画完之后它会突然显示结果。我希望它在绘制超过 1 条线后显示结果。我该怎么办?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    let touch = touches.first
    swiped = false
    lastPoint = touch?.location(in: self)
    firstPoint = lastPoint
}


override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesMoved(touches, with: event)
    if let touch = touches.first {
        swiped = true
        currentPoint = touch.location(in: self)
        drawShapeLayer(from: lastPoint, to: currentPoint)
        lastPoint = currentPoint
    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesEnded(touches, with: event)
    if !swiped {
        drawShapeLayer(from: lastPoint, to: lastPoint!)
    }


    if  c1.contains(firstPoint) && c3.contains(linePoint) && c2.contains(lastPoint){
        AlertView.instance.showAlert(title: "Hooray!", message: "You made it!", alertType : .success)
    }

    else {
        AlertView.instance.showAlert(title: "Oops!", message: "You've almost got it.", alertType : .failure)
    }
}

【问题讨论】:

    标签: ios swift touch draw cgpath


    【解决方案1】:

    首先,使用 UISwipeGestureRecognizer 可能更容易 https://developer.apple.com/documentation/uikit/uiswipegesturerecognizer

    它们抽象出很多东西,并简化了状态和路径之类的东西。

    其中一些让我感到困惑

    if !swiped {
        drawShapeLayer(from: lastPoint, to: lastPoint!)
    }
    

    不应该是这样的

    if !swiped {
        let touch = touches.first
        lastPoint = touch?.location(in: self)
        drawShapeLayer(from: firstPoint, to: lastPoint!)
    }
    

    也在这个

      if  c1.contains(firstPoint) && c3.contains(linePoint) && c2.contains(lastPoint){
            AlertView.instance.showAlert(title: "Hooray!", message: "You made it!", alertType : .success)
        }
    

    不会有 linePoint != lastPoint 的时候。

    除非“drawShapeLayer”改变了这些,在这种情况下你的数据封装有点混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多