Search code examples
iosobjective-cuiviewalphauitouch

Can I create a totally transparent UIView that receives touches?


I want to create a totally transparent UIView overlay (and it has subviews) to receives touches. I could set the alpha to a low value (like 0.02) to get an approximate effect.

But I wonder is it possible for a alpha == 0 UIView to receives touches, through other UIView configs?


Solution

  • You can accomplish this by overriding the hitTest:withEvent: method in the class of your fully transparent view, like:

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        return self;
    }
    

    The implementation of hitTest:withEvent: doesn't have to be that simple, of course. The point is that you can cause even a fully transparent view to be touchable as long as something returns that view from hitTest:withEvent:.

    Do note, however, that screwing around with hitTest:withEvent: is an easy way to create some very weird bugs. Use this method with caution.