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