J'ai affaire à une application Cocos2D pour iPhone avec le Game Center Leaderboard. Dans cette application, l'utilisateur doit tracer des lignes en mode paysage (l'iPhone est horizontal). Il arrive alors que le toucher commence à l'extérieur de l'écran (sur le côté gauche, près du microphone) et se poursuive à l'intérieur de l'écran. L'application commence à dessiner correctement dès que le doigt entre dans le cadre de l'écran. Cependant, si j'affiche la vue avec le classement (qui est en fait correctement représenté) et que je reviens au jeu, l'application cesse de gérer les touchers qui commencent à l'extérieur de l'écran. En fait, elle ne gère plus que ceux qui commencent en haut de l'écran, comme s'il y avait une ligne de pixels en haut qui n'était pas prise en compte.
J'ai commencé le tableau de bord de cette manière :
- (void) showLeaderboard
{
GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
if (leaderboardController != nil){
tempVC=[[UIViewController alloc] init] ;
leaderboardController.leaderboardDelegate = self;
[[[CCDirector sharedDirector] openGLView] addSubview:tempVC.view];
[tempVC presentModalViewController:leaderboardController animated:YES];
tempVC.view.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(0.0f));
tempVC.view.bounds = CGRectMake(0, 0, 480, 320);
tempVC.view.center = CGPointMake(240, 160);
[leaderboardController release];
}
}
et le libérer de cette manière :
-(void) leaderboardViewControllerDidFinish: (GKLeaderboardViewController *) viewController{
[tempVC dismissModalViewControllerAnimated:YES];
[tempVC.view.superview removeFromSuperview];
[tempVC.view removeFromSuperview];
[tempVC release];
}