Как обнаружить прикосновение к UIImageView внутри UIScrollview? - PullRequest
3 голосов
/ 18 февраля 2011

У меня есть UIScrollview в моем приложении, и я заполняю его множеством UIImageViews приблизительно 900. Все они очень маленькие и состоят только из двух разных изображений снова и снова.

Теперь у меня многопроблемы с обнаружением касания на одном из этих UIImageView.

Я назначил им все уникальные теги, чтобы иметь возможность различать их, но я действительно изо всех сил пытаюсь обнаружить касание.

Цель состоит в том, чтобы просто иметь возможность изменять изображение прикосновения к UIImageView.

Из-за большого количества включенных видов простой цикл проверки координат касания для каждого фрейма UIImageViews просто вешает мое приложение.1010 * У кого-нибудь есть предложения?

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

Бен

Ответы [ 4 ]

4 голосов
/ 21 декабря 2011

В моем случае проще всего было добавить распознаватель жестов:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
//Default value for cancelsTouchesInView is YES, which will prevent buttons to be clicked
singleTap.cancelsTouchesInView = NO; 
[myScrollView addGestureRecognizer:singleTap];   

Затем используйте этот метод для захвата касания:

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
  { 
    CGPoint touchPoint=[gesture locationInView:myScrollView];
  }
3 голосов
/ 18 февраля 2011

UIImageView отключил сенсорную обработку по умолчанию.Чтобы изменить для этого параметра userInteractionEnabled значение YES (см. Документы здесь http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIImageView_Class/Reference/Reference.html)

. Также, если вы хотите узнать, какое представление было отображено в иерархии представлений, вы можете использовать hitTest:withEvent: (см. Документы в UIView), которое будетгораздо быстрее, чем вы перебираете иерархию.

В более широком смысле, я не думаю, что одновременное наличие 900 UIImageView на экране будет хорошей долгосрочной стратегией. Исследовали ли вы рисование содержимого экрана?через CoreGraphics?

0 голосов
/ 17 октября 2011

Лучший способ решить эту проблему - создать подкласс UIScrollView, добавить к нему методы touchesBegan и т.

@interface MyScroll : UIScrollView
 {

 }
0 голосов
/ 18 февраля 2011

Вы можете легко реализовать этот метод для объекта UIImageView:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
      //You clicked inside the object
    }
    return [super hitTest:point withEvent:event]
}

Используйте возврат, чтобы сообщить приложению следующий респондент касания (такой как uiimageview или scrollview).

...