1

J'écris un jeu dans cocos2d. Je veux ajouter MFMailComposeViewController à la scène. Ainsi, lorsque je touche un CcLabel dans la scène, la feuille de courrier est ouverte.Comment afficher le composeur de courrier en mode paysage en utilisant MFMailComposeViewController dans cocos2d?

@interface EmailScene : CCScene <MFMailComposeViewControllerDelegate> 
{ 
    MFMailComposeViewController *picker; 
} 

-(void)displayComposerSheet; 

@end 

@implementation EmailScene 

- (id) init { 

    self = [super init]; 
    if (self != nil) { 
     [self displayComposerSheet]; 
    } 
    return self; 
} 
-(void)displayComposerSheet 
{ 

    [[CCDirector sharedDirector] pause]; 
    picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 

    NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"]; 
[picker setToRecipients:toRecipients]; 

    [[[CCDirector sharedDirector] openGLView] addSubview:picker.view]; 
    [[CCDirector sharedDirector] stopAnimation]; 
} 
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{ 
    [[CCDirector sharedDirector] resume]; 
    CCScene *Scene = [CCScene node]; 
    CCLayer *Layer = [GameWinScreen node]; 
    [Scene addChild:Layer]; 

    [picker.view removeFromSuperview]; 
    [[CCDirector sharedDirector] startAnimation]; 
    [picker dismissModalViewControllerAnimated:YES]; 
    [[CCDirector sharedDirector] replaceScene:Scene]; 
} 

@end 

alt text http://www.freeimagehosting.net/uploads/4a77b9ceb9.png

Mais, le problème est mon jeu est en mode paysage. Donc, j'ai besoin de la feuille de courrier pour afficher en mode paysage. Mais, ici, la feuille de courrier est affichée en mode portrait. Et le clavier apparaît en mode paysage. Mais, la feuille de contrôle du courrier est en mode portrait.

Et comment pouvons-nous changer le « envoyé de mon iPhone » à « Envoyé de mon iPad »

Merci.

alt text http://www.freeimagehosting.net/uploads/3eb39ea1de.png

+0

Cela semble être un bug dans l'implémentation d'Apple. Avez-vous vérifié qu'il est dans la mauvaise orientation sur l'appareil lui-même? –

+0

j'ai aussi le problème .. j'utilise cocos2d 99,5 ...... sp ... commencer une prime ... – Rony

Répondre

2

Vous pouvez essayer de tourner manuellement vue ...:

CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90)); 

[picker.view setTransform:landscapeTransform]; 
+0

si je tourne le sélecteur il fonctionne bien ... mais quand je ferme le picker.view. ..... en appuyant sur le bouton de fermeture ...... ma scène originale transformée en mode Portrait ...... – Rony

+0

euh .... essayer d'ajouter deux mêmes lignes avant (ou après, je ne suis pas sûr , essayez ce qui vous convient le mieux) [picker.view removeFromSuperview]; mais avec degreesToRadian (0) – marko

0

Vous pouvez faire votre propre mailcomposer qui est dérivé de MFMailComposeViewController et vous pouvez remplacer uniquement la fonction shouldAutorotateToInterfaceOrientation. Je n'ai pas essayé ça, je te donne juste une idée.

0

Qui gère votre objet EmailScene? Si vous avez suivi le modèle MVC, essayez de présenter l'objet MFMailComposeViewController en utilisant la vue viewController of EmailScene. Cela fonctionnera si vous avez pris en charge toutes les orientations dans le contrôleur de vue.

Utilisation:

-(void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated 

Au lieu d'ajouter le point de vue de la MFMailComposeViewController en tant que sous-vue. Editer: Essayez de présenter le MFMailComposeViewController en utilisant le contrôleur de vue racine.