UITapGestureRecognizer не работает в UIImageView - программирование
Подтвердить что ты не робот

UITapGestureRecognizer не работает в UIImageView

У меня был следующий код:

UITapGestureRecognizer *showStoryTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showNewsStory:)];
[showStoryTapRecognizer setDelegate:self];
[self.storyImageView_ addGestureRecognizer:showStoryTapRecognizer];
[showStoryTapRecognizer release];

Это, однако, не вызывает showNewsStory, почему это? Я включил userInteraction в представлении изображения.

4b9b3361

Ответ 1

UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)];

[oneTouch setNumberOfTouchesRequired:1];

[imageView addGestureRecognizer:oneTouch];

imageView.userInteractionEnabled = YES;

Ответ 2

Вы должны включить взаимодействие с пользователем для объекта UIImageView:

[self.storyImageView_ setUserInteractionEnabled:YES];

EDIT:

Попробуйте удалить

[showStoryTapRecognizer setDelegate:self];

Я не думаю, что UITapGestureRecognizer имеет свои методы делегирования, насколько мне известно. Забастовкa >

Ответ 3

UIImageView является единственным подклассом UIView внутри UIKit, у которого по умолчанию отключено взаимодействие пользователя.

Ответ 4

Может быть... action:@selector(showNewsStory) вместо action:@selector(showNewsStory:). Пожалуйста, проверь это. Есть ли в этом контроллере другие UITapGestureRecognizer? Попробуйте следующее:

otherTapRecognizer.cancelsTouchesInView = NO;

Ответ 5

objective-c ios 10

UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)];

[oneTouch setNumberOfTouchesRequired:1];

[imageView addGestureRecognizer:oneTouch];

imageView.userInteractionEnabled = YES;

//swift 3.0

   let oneTouch = UITapGestureRecognizer(target: self, action: #selector(self.OneTouchHandeler(_:)))

imageView.addGestureRecognizer(oneTouch)

imageView.isUserInteractionEnabled = true

Ответ 6

Я также заметил, что в swift3, если вы добавляете распознаватель жестов, который также ищет цель, а цель обычно self, тогда вы должны сделать UIView, к которому вы добавляете распознаватель жестов, lazy var. В противном случае распознаватель жестов не будет работать. Я думаю, что это ошибка в swift3. В идеале, если вы получаете доступ к себе в переменной до того, как класс полностью инициализирован, он должен выдать ошибку. В приведенном ниже коде не будет обнаружен распознаватель жестов.

let messageImageView: CachedImageView = {
    let iv = CachedImageView()
    iv.translatesAutoresizingMaskIntoConstraints = false
    iv.layer.cornerRadius = 16
    iv.layer.masksToBounds = true
    iv.contentMode = .scaleAspectFill
    iv.isUserInteractionEnabled = true
    let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
    zoomTap.numberOfTapsRequired = 1
    iv.addGestureRecognizer(zoomTap)
    return iv
}()

Чтобы исправить это, вы должны использовать lazy var

lazy var messageImageView: CachedImageView = {
    let iv = CachedImageView()
    iv.translatesAutoresizingMaskIntoConstraints = false
    iv.layer.cornerRadius = 16
    iv.layer.masksToBounds = true
    iv.contentMode = .scaleAspectFill
    iv.isUserInteractionEnabled = true
    let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
    zoomTap.numberOfTapsRequired = 1
    iv.addGestureRecognizer(zoomTap)
    return iv
}()

Ответ 7

Если вы уже установили imageView.userInteractionEnabled = YES;, но действие все равно не срабатывает. Может быть, это потому, что для одного из супервизоров imageView userInteractionEnabled нет,