2011-06-27 2 views
9

J'ai un Viewcontroller avec deux UIViews, un nommé textureView et un objectView.Détecter tactile sur sous-vue

Quand j'ai une seule vue, je détecter tactile en utilisant ceci:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSArray *allTouches = [touches allObjects]; 

    for (UITouch *touch in allTouches) 
    { 
     gestureStartPoint = [touch locationInView:self.view]; 
      if([touch view] == controlUIImageview){ 
        NSLog(@"TOUCH DETECT"); 
       } 
     } 
} 

Comment puis-je écrire cette partie si j'ai des choses que je veux interagir avec la textureView et certains dans le objectView?

Dois-je définir textureView et controlView sur setUserInteractionEnabled:TRUE?

Merci!

+0

Avez-vous essayé d'installer textureView et contr olView to setUserInteractionEnabled: VRAI? Qu'est-il arrivé quand vous l'avez essayé? –

Répondre

1

Oui, vous avez besoin de faire cela, si vous voulez détecter touch sur n'importe quelle vue, vous devez setUserInteractionEnabled: TRUE, ou activer dans IB (si vous ajoutez des vues de IB).

3

Essayez d'ajouter un tag pour chaque sous-vues que vous voulez ajouter .... comme:

textureView.tag=0; 
objectView.tag=1; 

alors:

for (UITouch *touch in allTouches) 
    { 
    if(touch.view.tag==0){ 
     //...do your stuff with textureView 
    }else{ 
     //...do your stuff with objectView 
    } 
} 
+0

Oui, cela fonctionne pour détecter les différentes vues, mais comment puis-je détecter une touche sur une vue d'image dans une vue spécifique? – molle

6

Autre façon de le faire:

 gestureStartPoint = [touch locationInView:self.view]; 
     if(CGRectContainsPoint(textureView.frame, gestureStartPoint)){ 
      ... 
     } 
     if(CGRectContainsPoint(objectView.frame, gestureStartPoint)){ 
      ... 
     } 
+0

Oui cela fonctionne aussi mais comment puis-je détecter un contact sur une uiimageview dans un uiview spécifique? Parce que [touch view] == uiimageview ne fonctionne pas pour moi quand uiimageview est dans une sous-vue. – molle

+0

il est certainement déformé, mais vous pouvez utiliser quelque chose comme ceci: 'CGRect rect1 = [self.view convertRect: textureView.controlUIImageview.frame toView: self.view]; if (CGRectContainsPoint (rect1, gestureStartPoint)) ... ' – aknew

1

Vous pouvez essayer le Singleton Approach

Par exemple, vous avez UIImageView comme dans TextureView sous-vue

Faire une classe object.h et par exemple le Déclare que vous voulez sous-vue interagir avec par exemple

UIImageView *DisplayPicture 
UIView *View; 

Une fois les thats fait. Vous pouvez définir tags pour chacun des deux points de vue

TextureView.tag=0; 
Objectview.tag=1; 

que d'utiliser cette méthode pour obtenir le Touch sur la vue et que subviews

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch *touch = [[event allTouches] anyObject]; 
CGPoint location = [touch locationInView:touch.view]; 


if (touch.view.tag > 0) { 


    NSLog(@"%d",[touch.view.subviews count]); 

    //Get Reference for Texture view 

    object.View=Touch.view; 

    //the index will the position at which u added the Subview(UIImageView) e.g If its the first time you addsubview and index of the subview will be O. 

    object.DipslayPicture=[touch.view.subviews objectAtIndex:0]; 

}else{ 
    //Similar for ObjectView 

} 
NSLog(@"tag=%@", [NSString stringWithFormat:@"%i", touch.view.tag]); 
i=touch.view.tag; 
} 

Que vous pouvez utiliser l'objet à faire comme vous aimez par exemple setImage

[object.DisplayPicture setImage:@"happiness.png"]; 

il a travaillé pour moi :) il aide quelqu'un espère :)

Questions connexes