2010-08-07 87 views
0

我有一个很大的问题,因为最近2天。我正在使用支持多点触控的视图。我的UIViewController有8-10 imageview。我想单独检测每个视图的触摸,但一次检测多个视图。在所有图像视图上检测到触摸,但问题在这里 -第二个UITouch事件触发器第一个UITouch事件为什么?

假设我点击图像视图并按住此图像视图,然后点击另一个图像视图,第二个图像视图被检测到触摸成功,但它也触发先前触摸并按住的第一个图像视图。但我不想要它。所以请任何人帮助我。代码级别的帮助表示赞赏。

注意:我的UIViewController也实现了用于滑动目的的TouchesMoved方法。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for(UITouch *touch in event.allTouches) { 
     if(CGRectContainsPoint([imView1 frame], [touch locationInView:self.view])){ 
      NSLog(@"imView 1 touched"); 
     } 
     if(CGRectContainsPoint([imView2 frame], [touch locationInView:self.view])){ 
      NSLog(@"imView 2 touched"); 
     } 
    } 
} 


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for(UITouch *touch in event.allTouches) { 
     if(CGRectContainsPoint([imView1 frame], [touch locationInView:self.view])){ 
      NSLog(@"imView 1 touch moved"); 
     } 
     if(CGRectContainsPoint([imView2 frame], [touch locationInView:self.view])){ 
      NSLog(@"imView 2 touch moved"); 
     } 
    } 
} 

回答

0

尝试继承UIImageView并处理该子类中的触摸代码。如果您出于某种原因需要将触摸传递给父级,则可以处理该触摸,然后将其发送给父级,这将是您的视图控制器。

编辑:

有你的自定义类这样

@interface CustomImageView : UIImageView {}@end 
@implementation CustomImageView 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"touch began %d",self.tag); 
    [self.nextResponder touchesBegan:touches withEvent:event]; 
} 
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"touch moved %d",self.tag); 
    [self.nextResponder touchesMoved:touches withEvent:event]; 
} 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"touch ended %d",self.tag); 
    [self.nextResponder touchesEnded:touches withEvent:event]; 
} 
@end 

,有你的parrent代码是这样的

@implementation trashmeTouchIpadViewController 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"parent Touch Began"); 
     //do parent stuff 
} 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"parent Touch ended"); 
     //do parent stuff 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.view setMultipleTouchEnabled:YES]; 
    UIImage *i1 = [UIImage imageNamed:@"img1.jpg"]; 
    CustomImageView *v1 = [[CustomImageView alloc] initWithImage:i1]; 
    v1.frame = CGRectMake(100, 100, 200, 200); 
    v1.userInteractionEnabled = YES; 
    v1.multipleTouchEnabled = YES; 
    v1.tag = 111; 
    [self.view addSubview:v1]; 
    [v1 release]; 
    UIImage *i2 = [UIImage imageNamed:@"img2.jpg"]; 
    CustomImageView *v2 = [[CustomImageView alloc] initWithImage:i2]; 
    v2.frame = CGRectMake(500, 100, 200, 200); 
    v2.userInteractionEnabled = YES; 
    v2.multipleTouchEnabled = YES; 
    v2.tag = 999; 
    [self.view addSubview:v2]; 
    [v2 release]; 
} 
+0

感谢您的快速反应。你能解释一下吗?它将如何工作? – user413866 2010-08-07 16:15:38

+0

而不是使用UIImageView,创建一个新的NSObject和子类UIImageView,使其看起来像 @interface MyImageView:UIImageView {} @ end ,并且在实现(.m文件)中,您将拥有@implementation,然后触摸代码。在子类中,你可以做任何你需要做的事情,如果你需要调用父类的东西,那么你可以做到这一点。发送触摸到父母,你会做类似 [self.nextResponder touchesMoved:touches withEvent:event]; – AtomRiot 2010-08-07 17:29:39

+0

感谢您的建议。如果你给我一个源代码示例,那么它会保存我的2天。请给我一个示例项目,它有超过2个imageview,并分别检测每个图像视图上的滑动,并解决了这个问题。再次感谢您的回复。 – user413866 2010-08-09 17:08:34