откриване на [UITouch изглед] в метода touchesMoved

Искам да плъзгам от един подизглед към друг в моето приложение (и да ги свържа с линия) и затова трябва да следя текущия изглед, докоснат от потребителя.

Мислех, че мога да постигна това, като просто извикам [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