Попытка повторно коснуться местоположения всегда возвращает ноль (0) в качестве местоположения x.
-
06-07-2019 - |
Вопрос
При написании обработчика touchesBegan для моего представления я столкнулся с этой интересной ошибкой.
Код:
...
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
...
Проблема в том, что point.x всегда равен нулю, независимо от того, где я «касаюсь», а y — огромное число, которое колеблется где-то между 1070000000 и 1090000000.
Дескрипторы находятся в классе представления, и они работают так же, как если бы я передал nil вместо self в locationInView.Я также попробовал перебрать все касания, и есть только одно, где x всегда равен нулю.
Так что же я здесь делаю не так?
Решение
Если есть шанс, что вы используете NSLog(@"%d, %d", point.x, point.y);распечатать значения точек?Это похоже на ошибку преобразования float -> int.Я использовал locationInView:много, и у меня никогда не было такой проблемы.
Вы также можете попробовать проверить [selfframe], чтобы убедиться, что оно не равно нулю.
Другие советы
Бен прав.Проблема в том, что вы пытаетесь напечатать значение, используя %d
в NSLog
, потому что point.x
и point.y
являются значениями с плавающей запятой.