2010-05-13 3 views
1

je voulais obtenir des points où l'utilisateur est en contact avec l'écran donc j'écrit le code suivant qui se déclenche lorsque l'utilisateur touchera quelque part sur l'écranobjet UITouch se comporter bizarrement

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 

    UITouch *touch = [[UITouch alloc] init]; 
    touch = [touches anyObject]; 
    CGPoint point = [touch locationInView:self]; 
    if (CGRectContainsPoint([dob frame], point)) { 
     [self showDatePickerforDOB:YES]; 
    } 
} 

mais ce code donne erreur de temps d'exécution . Lors du débogage, il a été révélé que locationInView n'est pas reconnu comme une fonction de l'objet tactile, d'autre part, il est documenté dans la documentation de référence de classe iphone. Quand j'ai changé le code pour exclure alloc i.e UITouch * touch; touch = [touche n'importe quel objet]; puis locationInView fonctionne parfaitement bien. Toutes les idées pour lesquelles UITouch * touch = [[UITouch alloc] init]; donne une erreur d'exécution.

Répondre

1

J'ai la raison pour laquelle il y avait une erreur. Il est à cause de la ligne

CGPoint point = [touch locationInView:self]; 

quand je l'ai changé CGPoint point = [touch locationInView:self.view]; erreur d'exécution a été supprimée. La raison en est que la fonction locationInView prend UIView comme paramètre et d'autre part je lui donnais un délégué i.e 'self'.

donc auto.view a résolu le problème

1

Je pense que vous ne devriez pas alloc et init le pointeur tactile, le bon code doit être:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 

    UITouch *touch = [touches anyObject]; 
    CGPoint point = [touch locationInView:self]; 

    if (CGRectContainsPoint([dob frame], point)) { 
     [self showDatePickerforDOB:YES]; 
    } 
} 

[touches anyObject] retourne un objet autorelease afin que vous n'avez pas besoin de alloc et init le pointeur tactile.

Questions connexes