Прикосновения начали не определять, к чему прикасаются

Я создаю вращающийся баннер с помощью NSTimer, чтобы отслеживать текущее изображение, при этом изображение анимируется из 5 разных изображений. У меня есть touchBegan, настроенный для обработки события касания на баннере, если кто-то щелкнет по нему. Моя пробная версия работает, но при переносе ее в другой проект она ломается.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == myImageView){
    [self getImage];
    NSLog(@"%@", currentImage);
}
}

Теперь, когда я помещаю точки останова в свой проект, он отлично улавливает прикосновение, но когда доходит до if ([touch view] == myImageView), он не обнаруживает прикосновения к представлению изображения.


person Spencer Cole    schedule 18.10.2011    source источник
comment
Я перестроил его и заставил работать, используя это, я забыл myImageView.userInteractionEnabled = YES; однако в нашем основном проекте это работает не так хорошо.   -  person Spencer Cole    schedule 18.10.2011


Ответы (2)


Не уверен, что может вызвать это, но пробовали ли вы использовать UIGestureRecognizer? Попробуйте выполнить что-то вроде приведенного ниже кода и посмотрите, вызывается ли метод.

  //Add Gesture Recognizer
  UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self    action:@selector(imageSelected)];
  tapped.numberOfTapsRequired = 1;
  [theImageView addGestureRecognizer:tapped];

  //Memory Cleanup
  [tapped release];

 -(void)imageSelected
  {
    NSLog(@"Selected an Image");
  }
person aahrens    schedule 18.10.2011
comment
Я просто попробовал это, и он даже не регистрирует, что я коснулся изображения. Я вспомнил об этом, и мое доказательство концепции я закончил, прежде чем обновился до нового xcode, все еще работающего на iOS 4. Теперь доказательство концепции даже не работает. Может быть проблема с iOS 5? - person Spencer Cole; 18.10.2011
comment
Возможно, я бы создал новый проект, чтобы опробовать ваш POC и посмотреть, не работает ли он по-прежнему. - person aahrens; 18.10.2011
comment
Вы создали новый проект с Xcode 4.2 и iOS5? Если это так, возможно, вы сохраняете / освобождаете объекты, а iOS5 теперь имеет ARC (автоматический подсчет ссылок) - person aahrens; 18.10.2011
comment
Я действительно создал новый проект, и когда я объявляю свое представление изображения в файле .h: @property (неатомный, сохранить) IBOutlet UIImageView * myImageView; Кроме того, не используются никакие удержания или релизы. - person Spencer Cole; 18.10.2011
comment
Итак, создав кнопку точно так же, как я сделал с изображением, и применив здесь свой метод, который вы предложили для кнопки, он работает нормально. Но не для ImageView. - person Spencer Cole; 18.10.2011

Прежде всего, вы должны установить для userInteractionEnabled значение YES в вашем методе viewDidLoad, как показано ниже:

[myImageView setUserInteractionEnabled:YES];

Обратите внимание, что для myImageView проверка возможности взаимодействия с пользователем через Identity Inspector у меня не сработала.

Затем измените

UITouch *touch = [[event allTouches] anyObject];

to

UITouch *touch = [touches anyObject];

так что метод touchesBegan выглядит следующим образом:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([touch view] == myImageView) {
       // place any code here when myImageView is touched
    }
 }
person Haris ur Rehman    schedule 15.11.2012
comment
Первая линия сэкономила мне много времени. Спасибо. - person Declan McKenna; 02.05.2013