blob: 304ed395214ad565c74f1de1c4ba1c951ed93ee6 [file] [log] [blame]
//
// WETouchableView.m
// WEPopover
//
// Created by Werner Altewischer on 12/21/10.
// Copyright 2010 Werner IT Consultancy. All rights reserved.
//
#import "WETouchableView.h"
@interface WETouchableView(Private)
- (BOOL)isPassthroughView:(UIView *)v;
@end
@implementation WETouchableView
@synthesize touchForwardingDisabled, delegate, passthroughViews;
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (testHits) {
return nil;
} else if (touchForwardingDisabled) {
return self;
} else {
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self) {
//Test whether any of the passthrough views would handle this touch
testHits = YES;
UIView *superHitView = [self.superview hitTest:point withEvent:event];
testHits = NO;
if ([self isPassthroughView:superHitView]) {
hitView = superHitView;
}
}
return hitView;
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate viewWasTouched:self];
}
@end
@implementation WETouchableView(Private)
- (BOOL)isPassthroughView:(UIView *)v {
if (v == nil) {
return NO;
}
if ([passthroughViews containsObject:v]) {
return YES;
}
return [self isPassthroughView:v.superview];
}
@end