#ios #touchesmoved
#iOS #touchesmoved
Вопрос:
В моем приложении есть несколько ярлыков, подобных этому…
Что мне нужно сделать, так это то, что при нажатии на ярлык я просто показываю название ярлыка в нижней части экрана. Это отлично работает при нажатии на каждую ячейку отдельно. Но я хочу показать изменения, даже если пользователь нажимает на определенную метку и перемещает палец по другой метке. То есть, как только он нажимает на экран, куда бы ни перемещался его палец, я хочу отследить эти места и показать изменения. Как я могу это сделать? Пожалуйста, объясните вкратце.
Заранее спасибо
Комментарии:
1. Разве вы не можете использовать touchesMoved: в своем супервизоре для этого? Или протестируйте это с помощью hitTest:
Ответ №1:
По умолчанию события касания отправляются только в представление, в котором они начались. Итак, самый простой способ сделать то, что вы пытаетесь сделать, — поместить все ваши метки в представление контейнера, которое перехватывает события касания, и позволить представлению контейнера решать, как обрабатывать события.
Сначала создайте подкласс UIView для контейнера и перехватывайте события касания, переопределяя hitTest:withEvent:
:
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
// intercept touches
if ([self pointInside:point withEvent:event]) {
return self;
}
return nil;
}
Установите этот пользовательский класс в качестве класса представления контейнера. Затем реализуйте различные touches*:withEvent:
методы в вашем представлении контейнера. В вашем случае должно сработать что-то вроде этого:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// determine which view is under the touch
UIView* view = [super hitTest:[[touches anyObject] locationInView:self] withEvent:nil];
// get that label's text and set it on the indicator label
if (view != nil amp;amp; view != self) {
if ([view respondsToSelector:@selector(text)]) {
// update the text of the indicator label
[[self indicatorLabel] setText:[view text]];
}
}
}