обнаружение [представление UITouch] в методе touchesMoved - PullRequest
3 голосов
/ 04 февраля 2011

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

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

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

Ответы [ 3 ]

3 голосов
/ 29 января 2012

И мой путь:

- (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];
    }
}
2 голосов
/ 04 февраля 2011

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

Первоначально я проверял вид следующим образом:

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

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

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

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

0 голосов
/ 04 февраля 2011

UIView является подклассом UIResponder. Таким образом, вы можете переопределить прикосновения методов end / begin в вашем пользовательском классе, который наследует от 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];
}
...