2013-06-20 4 views
0

Я добавил простой UITapGestureRecognizer в UIImageView и создал Жест Метод, который вызывается, когда пользователь краны/прикасаетсяUIImageViewПочему UITapGestureRecognizer не работает для UIImageView?

Мой код: Метод

UITapGestureRecognizer *eagleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(eagleTapGestureIsCall:)]; 
eagleTapGesture.numberOfTapsRequired = 1; 
[self.egaleImgView addGestureRecognizer:eagleTapGesture]; 

Жест :

- (void)eagleTapGestureIsCall:(UITapGestureRecognizer *)recognizer 
{ 
    CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 
    NSLog(@"Eagle is Tapped X - %f",location.x); 
    NSLog(@"Eagle is Tapped Y - %f",location.y); 
} 

Вот если добавить Жест на UIView вместо self.egaleImgView то он работает (я имею в виду метод Жест называется), но почему он не работает на self.egaleImgView ???

После того, как я понял, что может быть UIView перехватывает касания, прежде чем они смогут достичь UIImageView.

Поэтому я добавил следующую строку при запуске viewDidLoad

self.view.userInteractionEnabled = NO; /// Here i set userInteractionEnabled = NO; 

Ниже приводится описание структуры для лучшего понимания.

   main UIView 
        |  | 

(Sub view) mainBackGroungImageView //// size is similar to size of main UIView 
        |  | 
     (Sub view) gestureAdded ImageView 

EDITED:

К сожалению, ребята за забыв упомянуть, что я уже добавил self.egaleImgView.userInteractionEnabled = YES; к моему ImageView, но он не работает для меня.

Просьба представить предложения по моей проблеме.

Заранее спасибо.

+0

Включили ли вы взаимодействие с пользователем ? На самом изображении. –

+2

По умолчанию действие пользователя отключено для изображений. – amar

+1

Не отключайте 'userInteraction' на представлении. –

ответ

11

Установите ImageView.userInteractionEnabled = YES;, так как это NO по умолчанию. И было бы лучше настроить взаимодействие пользователя с представлением.

+0

Извините, я забыл упомянуть, что я уже сделал это (я поместил self.egaleImgView.userInteractionEnabled = YES; в моем коде); но это не полезно для меня :( – iPatel

+1

У меня такая же проблема, но этот ответ исправил мою проблему! – why

0

UIImageView userInteractionEnabled отключен. Сделать это невозможно.

UITapGestureRecognizer *eagleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(eagleTapGestureIsCall:)]; 
eagleTapGesture.numberOfTapsRequired = 1; 
[self.egaleImgView addGestureRecognizer:eagleTapGesture]; 
self.egaleImgView.userInteractionEnabled = YES; 

У меня была такая же проблема. Это решило это.

+0

Я тоже сделал это, но моя проблема не решена :( – iPatel

+0

Тогда есть и другой вид. ? – Durgaprasad

+0

Я также пытаюсь сделать [self.mainBG bringSubviewToFront: self.view]; [self.egaleImgView bringSubviewToFront: self.mainBG]; но его не работает для меня :( – iPatel

1

Вместо [распознавания locationInView: [распознавание] просмотр]];

использование [распознавание местоположениеInView: сам];

+1

Что это, это не моя проблема, сначала прочитайте мой вопрос, его единственная информация для меня не важна для меня :( – iPatel

2

если вы установите userInteractionEnable = NO на родителе просмотра будет каскаден все детям views.Keep это enabled.Instead водопроводную жест вы ч попробовать что-то вроде этого:

Для того, чтобы получить щелчок на представлении изображения вы можете использовать метод - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;.

В -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event вашего вида вы можете получить вид, который тронут.Он может пойти что-то вроде этого,

CGPoint locPoint = [touch locationInView:self.view]; 
UIView* touchedSubView = [self.view hitTest:locPoint withEvent:event]; 

Затем вы можете добавить проверку для класса представления и осуществить то, что требуется, например, так

if ([touchedSubView isKindOfClass:[UIImageView class]]) { 
    //do stuff 
} 

Надеется, что это помогает

Смежные вопросы