UITapGestureRecognizer не работает в UIImageView
У меня был следующий код:
UITapGestureRecognizer *showStoryTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showNewsStory:)];
[showStoryTapRecognizer setDelegate:self];
[self.storyImageView_ addGestureRecognizer:showStoryTapRecognizer];
[showStoryTapRecognizer release];
Это, однако, не вызывает showNewsStory, почему это? Я включил userInteraction в представлении изображения.
Ответы
Ответ 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 нет,