Skip to content

Instantly share code, notes, and snippets.

@elizaaverywilson
Created April 18, 2014 02:20
Show Gist options
  • Select an option

  • Save elizaaverywilson/11021595 to your computer and use it in GitHub Desktop.

Select an option

Save elizaaverywilson/11021595 to your computer and use it in GitHub Desktop.
FInd a view that looks like something you can touch given point
- (UIView*)responderForPoint:(CGPoint)point {
UIView *rootView = self;
while (1) {
if (!rootView.superview) {
rootView = rootView.superview;
}
}
UIView *gameViewRootView = [rootView viewWithTag: NNGameViewRootViewTag];
UIView *responder = [self responderOf: gameViewRootView forPoint:point];
return responder;
}
- (UIView*)responderOf:(UIView*)view forPoint:(CGPoint)point {
if (view) {
if (!view.subviews) {
if (view.userInteractionEnabled) {
if (CGRectContainsPoint(view.frame, point)) {
for (Class allowedResponderClass in (Class)[self allowedResponderClasses]) {
if ([view isKindOfClass: allowedResponderClass]) {
return view;
}
}
}
}
} else {
for (NSUInteger i = 0; i < view.subviews.count; i++) {
UIView *subview = (UIView*)view.subviews[i];
UIView *responder = [self responderOf: subview forPoint:point];
if (responder) {
return responder;
}
}
}
}
return nil;
}
- (NSArray*)allowedResponderClasses {
return [NSArray arrayWithObjects:
[UIButton class]
, nil];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment