Touchesbegan не обнаруживает, к чему прикасаются

#iphone #ios #touch #imageview #touchesbegan

#iPhone #iOS #коснитесь #просмотр изображения #touchesbegan

Вопрос:

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

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

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

Комментарии:

1. Я перестроил его и заставил работать, используя это, я забыл myImageView.userInteractionEnabled =YES; однако в нашем основном проекте это работает не так хорошо.

Ответ №1:

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

   //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");
  }
  

Комментарии:

1. Я только что попробовал это, и это даже не регистрирует, что я коснулся изображения. Я вспоминал об этом, и мое доказательство концепции я закончил до того, как обновился до нового xcode, все еще работающего на iOS 4. Теперь проверка концепции даже не работает. Может ли это быть проблемой с iOS 5?

2. Возможно, я бы создал новый проект, чтобы опробовать ваш POC и посмотреть, не работает ли он по-прежнему.

3. Вы создали новый проект с Xcode 4.2 и iOS5? Если это так, возможно, вы сохраняете / освобождаете объекты, и в iOS5 теперь есть ARC (автоматический подсчет ссылок)

4. Я создал новый проект, и когда я объявляю свой вид изображения в файле .h: @property (неатомный, сохранить) IBOutlet UIImageView * myImageView; Кроме этого, не используется сохранение или освобождение.

5. Хорошо, итак, создаем кнопку точно так же, как я сделал с изображением, и применяем здесь ваш метод, который вы предложили кнопке, он работает просто отлично. Но не для просмотра изображений.

Ответ №2:

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

 [myImageView setUserInteractionEnabled:YES];
  

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

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

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

Для

 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
    }
 }
  

Комментарии:

1. Первая строка сэкономила мне много времени. Спасибо.