2010-10-31 3 views
0

J'ai une sous-classe de UILabel (MYLabel), et j'ajoute des instances de MYLabel à la vue principale de ViewController puis je les anime (en utilisant [UIView beginAnimations:] et [UIView commitAnimations] .Problème avec la détection des contacts à l'intérieur d'un UILabel

Si j'ai une instance statique de mon MyLabel, il n'a pas de problème étant touché et appelant touchesBegan:., mais alors qu'ils animaient, ils ne reconnaissent pas des touches

MyLabel a une touchesBegan: méthode qui est supposé faire des choses, et je suppose que mon MainViewController doit remplacer touchesBegan pour vérifier si le contact intersecte une instance de MYLabel, et si c'est le cas, appelez touchesBegan de MYLabel: e explicitement.

Semble-t-il que je vais dans la bonne direction? Cela semble un peu trop compliqué, et je ne trouve pas de bons exemples qui essaient de faire quelque chose de similaire, en dépit de ma conviction que c'est une chose assez simple à faire que font beaucoup d'applications.

-Commencez Mises à jour

Voici le code que je utilise pour ajouter et animer MyLabels. Je pense que je vais avoir besoin de faire les animer d'une manière différente ...

- (void)onTimer 
{ 
label = [[MYLabel alloc] initWithFrame:CGRectZero]; 

int xValue = 380; 
int yValue = (arc4random() % 400) +1; 
double speed = 4.0; 

int randomWord = (arc4random() % [[dictionarySingleton wordArray] count]); 

UIFont *font = [UIFont systemFontOfSize:22]; 

[label setText:[[dictionarySingleton wordArray] objectAtIndex:randomWord]]; 
[label setFont:font]; 
[label sizeToFit]; 
[label setFrame:CGRectMake(xValue, yValue, [label frame].size.width, [label frame].size.width)]; 
[label setBackgroundColor:[UIColor clearColor]]; 
[label setIsAnimating:YES]; 
NSLog(@"Is Animating"); 
[[self view] addSubview:label]; 



[UIView beginAnimations:nil context:label]; 
[UIView setAnimationDuration:speed]; 
[label setFrame:CGRectMake(-120, yValue, [label frame].size.width, [label frame].size.width)]; 
[UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)]; 
[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 
} 


- (void)onTimer gets called inside viewDidAppear: like this: 

    [NSTimer scheduledTimerWithTimeInterval:(0.7) target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 

J'espère que cela aide à clarifier les choses. Je pense que je pourrais avoir juste changer la façon dont l'interaction est traitée dans cette application ...

Répondre

1

Je pense - si je me souviens - il pourrait avoir à faire avec la valeur d'un «cadre» UIViews n'est pas tout à fait ce que vous vous attendez à ce que ce soit pendant qu'une animation est en cours - et cela pourrait être une détection tactile ratée.

Si vous avez vraiment besoin de faire cela - une chose que vous pourriez faire est de faire manuellement l'animation se déplace vous-même dans les appels NSTimer. Ceci assurerait que les cadres UIView étaient dans un état prévisible et cohérent à tout moment (c'est-à-dire jamais au milieu d'une "animation" UIView) - et les touches devraient fonctionner.

+0

Tout d'abord, merci. J'ai mis à jour ma question pour inclure le code que j'utilise pour ajouter MYLabels à ma vue et les animer. Je pense à la façon dont je suis en train de les ajouter, de déterminer quel MYLabel a été touché et d'appeler la touche touchée de MYLabel'sBegan: la méthode est impossible. Cela a-t-il du sens? – YuKagi

Questions connexes