cacao-touch: Comment transmettre un contact à un autre objet


4

Ceci est la question d'un débutant, j'ai peur:

J'ai un UIText qui couvre tout l'écran. J'ai une autre vue transparente sur le dessus de cette UITextView de manière à être en mesure de reconnaître les gestes glisser (horizontalement et verticalement), comme suit:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // UITextView 
    CGRect aFrame = CGRectMake(0, 0, 320, 480); 
    aTextView = [[UITextView alloc] initWithFrame:aFrame]; 
    aTextView.text = @"Some sample text."; 
    [self.view addSubview:aTextView]; 

    // canTouchMe 
    CGRect canTouchMeFrame = CGRectMake(0, 0, 320, 480); 
    canTouchMe = [[UIView alloc] initWithFrame:canTouchMeFrame]; 
    [self.view addSubview:canTouchMe]; 
    } 

Considérons les touches de l'utilisateur (pas de grands coups) le canTouchMe View. Dans ce cas, je voudrais que la vue canTouchMe disparaisse et transmette le contact au dessous de UITextView pour qu'il passe en mode édition et activer les options de défilement 'naturelles' d'un UITextView (c'est-à-dire uniquement horizontalement).

Mes touches ont commencé la méthode ressemble à ceci:

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

    [super touchesBegan:touches withEvent:event]; 

    UITouch *touch =[touches anyObject]; 
    gestureStartPoint = [touch locationInView:self.view]; 
} 

Comment puis-je dire cette méthode que si elle ne reconnaît que une seule touche, qu'il doit masquer l'canTouchMeFrame et TRANSMETTRE toucher à la UITextView? Désolé, si cela est basique, mais je n'ai aucune idée de la façon de mettre en œuvre cela. Merci pour vos suggestions


EDIT:

J'introduit une méthode touchEnded, mais je n'ai toujours pas de chance. La touche ne sera pas transmise à UITextView. Je dois taper deux fois afin de le modifier:

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

[super touchesMoved:touches withEvent:event]; 

UITouch *touch = [touches anyObject]; 
CGPoint currentPosition = [touch locationInView:self.view]; 

CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); // will always be positive 
CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); // will always be positive 


if (deltaY == 0 && deltaX == 0) { 

    label.text = @"Touch"; [self performSelector:@selector(eraseText) withObject:nil afterDelay:2]; 

    [aTextView touchesBegan:touches withEvent:event]; 

    [self.view bringSubviewToFront:aTextView]; 
    [self.view bringSubviewToFront:doneEdit]; 


} 

}

2

NSSet a une méthode -count. Si touches n'a qu'un seul objet, vous répondez à une seule touche.

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

    [super touchesBegan:touches withEvent:event]; 
    if ([touches count] == 1) { 
     [self hideMyRectangle]; 
     [someOtherObject touchesBegan:touches withEvent:event]; 
     //etc, etc. 
     return; 
     } 
    // if you get here, there's more than one touch.  
    UITouch *touch =[touches anyObject]; 
    gestureStartPoint = [touch locationInView:self.view]; 
} 
  0

Merci beaucoup pour votre aide. Cela fonctionne bien - le seul problème est que mon programme ne peut maintenant détecter que des touches et non plus des SWIPES. J'ai mis à jour le code en conséquence (voir ci-dessus). Il semble que si je reçois plus d'un contact, il ne le reconnaît pas comme tel, mais seulement comme un contact. Par exemple. Si je le fais glisser, il ne le reconnaît que comme une touche. 18 avril. 112011-04-18 11:53:42