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 } } } 
  • Невозможно загрузить данные с помощью утилиты fruitstrap (устройство iOS). Ошибка сегментации: 11
  • corebluetooth Чтение ошибки RSSI: операция была отменена
  • Вставка значения integerValue в словарь
  • xcode 4.5 - символы, не найденные для архитектуры i386 (zbar)
  • IOS Съемка с пользовательским просмотром камеры
  • Изменено имя проекта в Xcode, вызывающее ошибку именования
  • Проверьте, включено ли приложение в App Store
  • Как создать таймер обратного отсчета в xcode 4.5
  • Framework не найден Googlemaps sdk в iOS
  • Приложение не запускается автоматически в устройстве и получает ошибку на xcode
  • Статическая библиотека Cocoa Touch с Xcode 4.5
  • Interesting Posts

    Создать CVPixelBufferRef из CIImage для записи в файл

    Коллизии имен для методов расширения из разных фреймворков

    Как открыть URL-адрес AdMob в UIWebView в ios?

    Расположение и ориентация клавиатуры iOS

    Значение по умолчанию maxConcurrentOperationCount для NSOperationQueue

    Возможно ли, что мой закрытый код запуска приложения в iOS?

    Проверка того, содержит ли NSString данные base64

    iPhone приложение SQLite подготовить заявление аварии

    Проблемы с чтением настроек при использовании InAppSettingsKit

    Как анализировать HTML для поиска содержимого конкретных игл

    Кодовая база для статической библиотеки iOS для приложений с белой меткой

    Есть ли способ доступа к устройствам Bluetooth Low Low Energy в iOS?

    Любое выпадающее или выпадающее меню для iOS?

    Не удается подключить iPad с iOS 9 до XCode 7.1 (бета-версия 7B60)

    HTTP POST Request, HTML-форма ввода (логин: пользователь / пароль)

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.