UITapGestureRecognizer不在UIImageView中工作

我有以下代码:

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

但是这并不会触发showNewsStory,为什么呢? 我已经在图像视图中启用了userInteraction。

 UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)]; [oneTouch setNumberOfTouchesRequired:1]; [imageView addGestureRecognizer:oneTouch]; imageView.userInteractionEnabled = YES; 

您应该为UIImageView对象启用用户交互:

 [self.storyImageView_ setUserInteractionEnabled:YES]; 

编辑:

尝试删除

 [showStoryTapRecognizer setDelegate:self]; 

据我所知,我不认为UITapGestureRecognizer有它的委托方法。

UIImageView是UIKit中UIView的唯一默认禁用用户交互的子类。

也许… action:@selector(showNewsStory)而不是action:@selector(showNewsStory:) 。 请检查一下 。 这个控制器里有没有其他的UITapGestureRecognizer ? 尝试这个:

 otherTapRecognizer.cancelsTouchesInView = NO; 

objective-c 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 

如果你已经设置了imageView.userInteractionEnabled = YES; 但行动仍然没有开火。 也许这是因为对于imageView userInteractionEnabled的superviews之一是NO;

我也注意到,在swift3中,如果你正在添加一个手势识别器,也寻找目标和目标通常是self ,那么你必须使你添加手​​势识别器的UIView是一个lazy var 。 否则,手势识别器将无法工作。 我认为这是swift3中的一个bug。 理想情况下,如果您在完全初始化类之前正在访问variables,它应该会引发错误。 下面的代码将不会检测手势识别器。

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