简体   繁体   中英

How to add gesture recognizer to a UIImageview?

In the project, there are an UIView myView and an UIImageView myImage behinds the myView, views hierarchy:

UIWindow
|-- UIImageView (myImage)
|-- UIView (myView) [whole screen]

Then added a gesture recognizer to myImage in ViewController

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
        tapGesture.numberOfTapsRequired = 1;
        [myImage addGestureRecognizer:tapGesture];

But gesture doesn't affect myImage, myImage has setUserInteractionEnabled:YES . It will only affect when myImage placed in front of myView, how can I solve this problem?

Your UIView obviously intercept the touches before they can reach the UIImageView .

You can either put your UIImageView in front of your UIView , or disable user interaction on the UIView so it does not intercept the touches.

If you need finer grain over catching your touch events, you may either:

  • put your UIView on top of the UIImageView if it has to for design purposes (if it masks the UIImageView a bit for example) but make it not catch events ( userInteractionEnabled = NO ), and use a different UIView below the UIImageView to actually catch the events outside the UIImageView
  • keep your UIView on top of the UIImageView and keep it catching events ( userInteractionEnabled = YES ), but filter the events that pass thru it, by subclassing your UIView and overriding either the pointInside:withEvent: or the hitTest:withEvent: method.

For more information you should really read the dedicated Apple Programming Guide related to Event Handling .

my code:

UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc] 
initWithTarget:self action:@selector(hasLongPressed)];
[press setMinimumPressDuration:0.1f]; //1ms
press.delegate = (id)self;
[self.DGEMLogo addGestureRecognizer:press];

two properties are neccessary to do

1.) add the GestureRecognizer to your UIImageView (self.DGEMLogo) [self.DGEMLogo addGestureRecognizer:press];

2.) set your UIImage property Interaction enabled to TRUE

thats all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM