2013-08-27 1 views
1

У меня есть UIScrollView с subviews и UITapGestureRecognizer.Как определить, какой вид был затронут UITapGestureRecognizer?

Я создаю распознаватель так:

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)]; 
[self addGestureRecognizer:tgr]; 

Вид собственности UITapGestureRecognizer точек на самой точки зрения прокрутки, даже если пользователь прикоснулся другой вид. Мне нужно знать, касалось ли касание непосредственно на экране прокрутки.

+0

Что такое «я» в фрагменте кода? Scrollview? Как правило, вы выполняете [self.whateverViewAspect addGestureRecognizer:], чтобы специально присоединить gestureRecognizers к частям представлений –

+0

попытаться установить scrollview на отдельный объект UIView? например [viewWtihSCrollviewOnTopOf addSubview: scrollView]; [viewWtihSCrollviewOnTopOf addGestureRecognizer: tgr]; – user2277872

ответ

1

Вы можете стать либо подклассом UITapGestureRecognizer и добавить новый Ивар держать эту информацию в перекрывая touchesBegan:withEvent: метода что-то вроде этого

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    /* 
    * If you wanted you could store a set of all the views to allow 
    * for multiple touches 
    */ 
    self.touchedView = [touches.anyObject view]; 
    [super touchesBegan:touches withEvent:event]; 
} 

Или, если вы хотите, вы можете стать делегатом UITapGestureRecognizer и хранить повернутый вид как собственность в вашем классе путем внедрения gestureRecognizer:shouldReceiveTouch:

2

Предложения Павла хороши, но если вы не хотите (или не можете) подкласс или стать делегатом распознавателя, есть другой способ.

Вы можете запросить распознаватель жестов для своего locationInView:, а затем получить представление, в котором эта точка находится сверху, с помощью метода scrollView hitTest:withEvent: (определенного в UIView). Что-то вроде:

CGPoint location = [recognizer locationInView:scrollView]; 
UIView *touchedView = [scrollView hitTest:location withEvent:nil];