1.首先建一个MySubview.h
#import<UIKit/UIKit.h>
@interface MySubview :UIView{
}
@property (nonatomic,retain) UIScrollView *receiver;
@end
2.实现MySubview.m#import"MySubview.h"
@implementation MySubview
@synthesize receiver;
- (void)dealloc {
self.receiver = nil;
[super dealloc];
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (point.x>0&&point.x<360.0&&point.y>0.0&&point.y<150.0) {
UIView* child =nil;
if ((child = [super hitTest:point withEvent:event]) == self){
if (point.x<120) {
for (UIView *v in self.receiver.subviews) {
if (v.tag==((self.receiver.contentOffset.x/120)+101)) {
return v;
}
}
}elseif(point.x>240){
for (UIView *v in self.receiver.subviews) {
if (v.tag==((self.receiver.contentOffset.x/120)+103)) {
return v;
}
}
}
returnself.receiver;
}
return child;
}else{
return [super hitTest:point withEvent:event];
}
}
@end
这里就是可以让显示在屏幕中的scrollview中的button都接受到触摸事件,而不是单纯的scrollview size范围内。
怎么使用呢?
这里是横屏的,所以坐标有些大。
myscrollview=[[UIScrollViewalloc]initWithFrame:CGRectMake(120,0, 120, 175)];
myscrollview.backgroundColor=[UIColorclearColor];
myscrollview.contentSize=CGSizeMake(720,175);
myscrollview.clipsToBounds=NO;//可以不受size限制
mysub=[[MySubview alloc]initWithFrame:CGRectMake(30,90,360, 175)];
mysub.clipsToBounds=YES;
mysub.backgroundColor=[UIColor clearColor];
[listbackview addSubview:mysub];
mysub.userInteractionEnabled=YES;
mysub.receiver=myscrollview;