Разница между [событие allTouches] и [затрагивает все объекты]? - PullRequest
3 голосов
/ 22 июля 2010

In UIResponder

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

В чем разница между [event allTouches] и [touches allObjects]?

Ответы [ 2 ]

6 голосов
/ 22 июля 2010

Насколько я понимаю, это выглядит следующим образом:

[event allTouches] возвращает все касания, которые являются частью события.Некоторые из этих касаний могут быть предназначены для другого UIResponder.

Например, вы можете одновременно щелкнуть два представления, и респондент, связанный с каждым представлением, будет вызван со всеми касаниями события.

[touches allObject] содержит только касания для этого респондента.И, таким образом, в большинстве случаев вам нужно.

3 голосов
/ 15 декабря 2011

Событие дает доступ ко всем касаниям через allTouches. Даже касания, в настоящее время не активные (не движутся, не начинаются, не заканчиваются и не отменяются).

for (UITouch* touch in [[event allTouches]allObjects]) //loops through the list of all the current touches

touches - список всех касаний, которые изменились и имеют право на текущее событие.

for (UITouch* touch in [touches allObjects]) //loops through the list of all changed touches for this event.

Так что для touchesBegan:withEvent:

  • Если один палец коснется экрана, touches и [event allTouches] будут иметь одинаковое содержимое.
  • Если второй палец касается экрана, touches предоставит UITouch, связанный с этим пальцем, а [event allTouches] предоставит UITouch для этого пальца и того, который уже касается экрана.
  • Если 2 дополнительных пальца касаются экрана в одно и то же время, touches предоставит UITouch для 2 дополнительных пальцев, а [event allTouches] предоставит 4 экземпляра UITouch.

Теперь в случае touchesEnded:withEvent:

  • Если поднять один палец, touches предоставит доступ к экземпляру UITouch, связанному с этим пальцем, а [event allTouches] предоставит 4 экземпляра UITouch, даже один из последних прикосновений.
...