The title is hard .
The the main case is like this
UIView *superView = [[UIView alloc] initWithFrame:CGRectMake(0,0,400,400)];
UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(-200,-200,400,400)];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
[subView addGestureRecognizer:tapGesture];
[superView addSubView:subView];
OK , you will find that the tap gesture will take effect when you click the area in (0,0,200,200) , if you click the point (-150,-150) the tap gesture will not take effect.
I don’t know whether the click outside the superView bounds to cause this problem or not.
Anyone have any idea how to fix this?
The only workaround I’ve found for case like that is to create an instance of a view that is transparent for touches as main view. In such case inner view will respond to touches as it fits bounds of main. In the class I’ve made from different examples found in the net I can control the level of “touch visibility” like so:
fully visible – all of the touches end up in the view.
only subviews – the view itself invisible, but subviews get their touches.
fully invisible – pretty self explanatory I think 🙂
I didn’t try to use it with gesture recognizers, but I don’t think there will be any problem, as it works perfectly with regular touches.
The code is simple…
TransparentTouchView.h
TransparentTouchView.m
I believe that you can accomodate it to your needs.