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.