UITapGestureRecognizer не запускает UIImageView, созданный программно

Я использую XCode 4.5.1.

Я добавил <UIGestureRecognizerDelegate> в файле .h и в начале файла .m

 @interface FirstViewController () @property (nonatomic, strong) UIImageView *img1; @end 

Затем в viewDidLoad , создавая UIImageView программно, как

 self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, -30, 44, 44)]; [self.img1 setImage:[UIImage imageNamed:@"image1.png"]]; [self.img1 setAlpha:0.8]; [self.img1 setHidden:NO]; [self.img1 setUserInteractionEnabled:YES]; [self.img1 setTag:901]; 

А потом

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; tap.delegate = self; [self.img1 addGestureRecognizer:tap]; [self.view addSubview:self.img1]; [self.view bringSubviewToFront:self.img1]; 

и в конце

 - (void)guessTapObject:(UITapGestureRecognizer *) gesture { // guessing the image UIImageView *tapImageView = (UIImageView*) gesture.view; NSLog(@"Gesture Tag: %d", tapImageView.tag); } 

У меня есть 4 разных изображения и их создание программно, как описано выше. И применение анимации для перемещения их сверху вниз.

Я хочу, чтобы пользователь нажал на изображение, он должен анимироваться и исчезать (я знаю этот код). Но код не вызывает событие переключения. Я поставил guessTapObject останова в начале функции guessTapObject , но не уходил туда никогда.

В декларации UITapGestureRecognizer отладка показывает, что guessTapObject прикрепляется к распознавателю для выполнения действия касания.

Пожалуйста, помогите, почему событие нажатия не запускает его селекторный метод ???

Заранее благодарны за Вашу помощь.


Отредактировано: я также пробовал с циклом for для распознавания жестов отдельно для каждого изображения

 for (UIView * view in self.view.subviews) { if (view.tag > 900){ UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; // tap.delegate = self; [view addGestureRecognizer:tap]; NSLog(@"tapView: %@", tap.view); NSLog(@"tap: %i", tap.enabled); } } 

3 Solutions collect form web for “UITapGestureRecognizer не запускает UIImageView, созданный программно”

Я застрял в подобной проблеме. Убедитесь, что imageView установлен верно для userInteraction ..

 imageView.userInteractionEnabled = YES; 

Это сработало для меня!

Проверь это
Добавьте следующий код в контроллер View

  • В файле viewController.h

     @property (nonatomic, strong) UIImageView *img1; @property (nonatomic, strong) UIImageView *img2; @property (nonatomic, strong) UIImageView *img3; 
  • В файле viewController.m
    Внутри viewDidLoad метод

     // Init Image 1 self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, 30, 44, 44)]; [self.img1 setImage:[UIImage imageNamed:@"image1_name.jpg"]]; [self.img1 setAlpha:0.8]; [self.img1 setHidden:NO]; [self.img1 setUserInteractionEnabled:YES]; [self.img1 setTag:901]; // Init Image 2 self.img2 = [[UIImageView alloc] initWithFrame:CGRectMake(100, 30, 44, 44)]; [self.img2 setImage:[UIImage imageNamed:@"image2_name.jpg"]]; [self.img2 setAlpha:0.8]; [self.img2 setHidden:NO]; [self.img2 setUserInteractionEnabled:YES]; [self.img2 setTag:902]; // Init Image 3 self.img3 = [[UIImageView alloc] initWithFrame:CGRectMake(50, 130, 44, 44)]; [self.img3 setImage:[UIImage imageNamed:@"image3_name.jpg"]]; [self.img3 setAlpha:0.8]; [self.img3 setHidden:NO]; [self.img3 setUserInteractionEnabled:YES]; [self.img3 setTag:903]; // Add Images to view [self.view addSubview:self.img1]; [self.view bringSubviewToFront:self.img1]; [self.view addSubview:self.img2]; [self.view bringSubviewToFront:self.img2]; [self.view addSubview:self.img3]; [self.view bringSubviewToFront:self.img3]; // Set Tap Gesture to each image of view for (UIView * view in self.view.subviews) { if (view.tag > 900){ UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; [view addGestureRecognizer:tap]; NSLog(@"tapView: %@", tap.view); NSLog(@"tap: %i", tap.enabled); } } 

Убедитесь, что изображения должны быть добавлены до цикла for (добавление TapGesture с использованием массива subview)

я решил, применяя жест в представлении, вместо каждого изображения отдельно.

[self.view addGestureRecognizer:tap];

а затем в функции обработчика / selector guessTapObject , я использовал это

 CGPoint tapLocation = [gesture locationInView:self.view]; // gives the tap coordinates for (UIView * view in self.view.subviews) { // gives view by iterating on each subview CGRect dropRect = [[[view layer] presentationLayer] frame]; // specific way of getting the frame with respect to its layer if(CGRectContainsPoint(dropRect, tapLocation)){ // checks for tap in the boundaries of view frame if (view.tag > 900) // my specific view // done what i want to do with that specific one // as i removed it from my superview } } } 
  • Откройте приложение Google+ в Xcode 4.5
  • В чем разница между «Архитектурами» и «Действительными архитектурами» в настройках сборки Xcode?
  • Существуют ли методы dealloc и viewDidUnload при использовании ARC, pre-iOS6?
  • Как настроить имя оператора в симуляторе iOS 6?
  • Как подавить отсутствующее предупреждение о запуске образа по умолчанию в Xcode 4.5?
  • AutoLayout, ограничения, iPhone 3,5 дюйма и 4 дюйма
  • Локализация XCode 4.5 + языковой формат, загруженный в основной интерфейс UIWebView / IOS
  • «Автоматическая компоновка по-прежнему требуется после выполнения -layoutSubviews» с подклассом UITableViewCell
  • Как связать или загрузить общие библиотеки (.so) в Objective C?
  • Как создать таймер обратного отсчета в xcode 4.5
  • Как установить идентификатор UIView в Xcode 4.5 / iOS для отладки автоматического макета?
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.