обнаружение [UITouch view] в методе touchMoved

Я хочу перетащить из одного подпредставления в другое в моем приложении (и соединить их линией), поэтому мне нужно отслеживать текущее представление, которого касается пользователь.

Я думал, что могу добиться этого, просто вызвав [UITouch view] в методе touchesMoved, но после беглого просмотра документации я обнаружил, что [UITouch view] возвращает только представление, в котором произошло первое касание.

Кто-нибудь знает, как я могу обнаружить касание вида во время перетаскивания?


person Matt Carr    schedule 04.02.2011    source источник


Ответы (3)


И мой путь:

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([self pointInside:[touch locationInView:self] withEvent:event]) {
        [self sendActionsForControlEvents:UIControlEventTouchUpInside];
    } else {
        [self sendActionsForControlEvents:UIControlEventTouchUpOutside];
    }
}
person Evgen Bodunov    schedule 29.01.2012

После небольшого исследования я нашел ответ.

Изначально я проверял представление вот так:

if([[touch view] isKindOfClass:[MyView* class]])
{
   //hurray.
}

Но, как объяснено в моем вопросе, [сенсорный вид] возвращает вид, в котором произошло исходное касание. Это можно решить, заменив приведенный выше код следующим:

if([[self hitTest:[touch locationInView:self] withEvent:event] isKindOfClass:[MyView class]])
{
    //hurrraaay! :)
}

Надеюсь это поможет

person Matt Carr    schedule 04.02.2011

UIView является подклассом UIResponder. Таким образом, вы можете переопределить методы завершения / начала касаний в своем настраиваемом классе, который наследуется от UIView. Затем вы должны добавить делегата к этому классу и определить для него протокол. В методах

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

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

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [delegate touchesBeganInView: self withEvent: event];
}
person Max    schedule 04.02.2011
comment
Цените ответ Макс, но код, который я показал, было немного проще реализовать :) Большое спасибо. - person Matt Carr; 04.02.2011