Если вы выполняете сложное обнаружение жестов на UIView
, имеет смысл сделать это в представлении UIViewController
.Чтобы инкапсулировать эту функциональность, вы должны создать подкласс UIView
, реализовать там обработку жестов, а затем при необходимости передать соответствующие сообщения классу контроллера.
Последний вопрос, по-видимому, является вашим основным вопросом.Это классический случай для шаблона делегирования .Если вы решите создать пользовательский UIView
для реализации обработки жестов, давайте назовем его FooView
, тогда вы могли бы создать формальный протокол FooViewDelegate
для обработки сообщений делегату представления.В этом случае делегатом будет ваш класс контроллера. Apple docs по протоколам.
Кроме того, вы можете просто реализовать обнаружение жестов в своем подклассе UIViewController
, и вам не придется беспокоиться о делегировании.Это зависит от ваших требований.
В качестве другой альтернативы (на которую вы ссылаетесь), если контроллер представления сохраняет ссылку на класс SwipeDetector
, вы можете наблюдать свойства в экземпляре SwipeDetector
.
[self addObserver:self forKeyPath:@"swipeDetector.swipeDirection"
options:NSKeyValueObservingOptionNew
context:NULL];
Обратите внимание, что для работы KVO вам необходимо использовать средства доступа к свойствам в классе SwipeDetector
, например, self.swipeDirection = kDirectionKeyUp;
вместо прямой установки иваров.