Координаты кнопок иногда находятся за пределами диапазона, когда предыдущее касание все еще на экране - PullRequest
0 голосов
/ 18 сентября 2018

Я работаю над iOS-приложением для игры на барабанах с несколькими кнопками для разных звуков.Я использую значение у прикосновения каждой кнопки, чтобы определить скорость.Он работает нормально, пока я касаюсь только одной кнопки за раз, но если я удерживаю одну кнопку, а затем касаюсь второй, я получаю значения координат в диапазоне от 10 до 20 процентов времени.Нелегко предсказать, когда произойдут координаты вне диапазона, но, как правило, при десяти нажатиях второй кнопки, по крайней мере, один раз происходит неправильное считывание.

Координаты вне диапазона иногда слишком высоки, а иногда отрицательныи, кажется, связаны с расположением первого касания, а не с определением координат касания на второй кнопке.

Чтобы проверить проблему, я создал приложение только с двумя кнопками, одна нав левом нижнем углу экрана и в правом верхнем углу.Каждая кнопка имеет размер 100 x 100, что позволяет легко увидеть, находятся ли координаты вне диапазона.Кнопка 1 и кнопка 2 работают нормально, если их нажимать в одиночку.Но если кнопка 1 удерживается при нажатии кнопки 2, иногда результаты могут быть неожиданными.Например, во время одного теста, после 16 нажатий, которые дали ожидаемые результаты, при следующем нажатии были возвращены следующие координаты:

Кнопка 2

point2.x = -185.0

point2.y = 328.5

Это также иногда случается, когда первый палец касается части экрана, где нет кнопок;просто пустая часть экрана.

Вот код, который я использую для поиска и печати координат.

    @IBAction func Button1(_ button: UIButton, forEvent event: UIEvent) {
    guard let touch = event.allTouches?.first else { return }
    let point1 = touch.location(in: button)
    print("Button 1")
    print("point1.x = ", point1.x)
    print("point1.y = ", point1.y)
    print("")
}

@IBAction func Button2(_ button: UIButton, forEvent event: UIEvent) {
    guard let touch = event.allTouches?.first else { return }
    let point2 = touch.location(in: button)
    print("Button 2")
    print("point2.x = ", point2.x)
    print("point2.y = ", point2.y)
    print("")
}
...