NewsBlur-viq/clients/ios/Popover/WETouchableView.m
2013-06-27 09:43:22 -07:00

70 lines
1.3 KiB
Objective-C
Executable file

//
// 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;
- (void)dealloc {
[passthroughViews release];
[super dealloc];
}
- (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