Как использовать прикосновения Начинается снова после прикосновений Закругленный - PullRequest
0 голосов
/ 10 ноября 2019

Мой результат кода после того, как я уже нарисовал линию, он обнаружит правильную или неправильную позицию и покажет результат, но после того, как я уже нарисовал, он внезапно покажет результат. Я хочу, чтобы он показал результат после того, как я нарисовал более 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)
    }
}

1 Ответ

0 голосов
/ 10 ноября 2019

Во-первых, может быть проще использовать 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' не изменит их, в этом случае инкапсуляция данных немного сбивает с толку.

...