7
votes

iOS 6 problème d'orientation de périphérique

J'ai 2 contrôleurs d'affichage. Je souhaite que la 1ère viewController soit en mode portrait uniquement tandis que 2nd ViewController doit prendre en charge toutes les orientations. S'il vous plaît aidez-moi.

dans la classe d'Appdelegate, mon code est le suivant: xxx

1st ViewController code est: xxx

2nd ViewController code est: xxx

Ce que j'inspecte est la méthode "DoTutoriotate" n'est pas appelée pour la première et la 2e ViewController.

Votre aide rapide sera fortement appréciable. Merci. Kashif


0 commentaires

3 Réponses :


8
votes

Essayez de définir supportéesInterfaceOrientations pour 2nd uiviewController comme ceci: xxx pré>

également, activer uniquement portrait dans la même méthode dans la première méthode UIViewController. P>

Peut-être que vous devez activer ces orientations également dans les paramètres du projet que 2e UIViewController a besoin de prendre en charge. P>


[EDIT # 1: Ajout de l'exemple d'application] strong> p>

Ici, vous allez de l'exemple d'application. résout votre problème, espérons-le. p>

appdelegate.h strong> p> xxx pré>

appdelegate.m strong> p> xxx pré>

firstviewcontroller.h strong> p> xxx pré>

p> xxx pré>

secondviewcontroller.h strong> p> xxx pré>

secondviewcontroller.m strong> P>

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self)
    {
        // Custom initialization
    }

    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeLeft;
}

- (IBAction)goToFirstViewController:(id)sender
{
    [self dismissViewControllerAnimated:NO completion:nil];
}

@end


10 commentaires

J'ai Portrait, Paysage Gauche et Paysage Rigth Réglage de l'orientation dans le projet Info.Plist. J'ai aussi posté mon code, aidez-moi s'il vous plaît dehors.


D'accord. Vous devriez retourner uiterfaceorientationmaskportrait de la méthode supportée d'interfaceOrientation en classe qui possède votre 1er uiviewontroller et uiterfaceorientationmasklandscoltight | Uiterfaceorientationmasklandscapeleft de la même méthode de classe qui possède 2e UIViewController.


En outre, enregistrez-vous dans l'interface Builder lorsque vous cliquez sur XIB Fichier que vous avez effectué pour la 2e UIViewController que son orientation est définie sur Paysage.


Le propriétaire de la 1ère viewController est NAVCONTROLERVIEWCONTROLLER.SO Selon vous, j'ai placé UiTorfaceOrientationMaskPortrait dans la méthode supportée d'interface De même, le propriétaire de 2nd ViewController est la 1re viewController. J'ai maintenant placé uiterfaceorientationmasklandscoltight | Uiterfaceorientationmasklandscapeleft dans le contrôleur de 1ère vue. Mais pas de succès.


J'ai fait éditer # 1 à ma réponse. Essayez cela et laissez-moi savoir si cela a fonctionné pour vous.


Bonjour, j'ai essayé votre solution n ° 1, mais sa tournage toujours. Je veux aussi que ma vie de vision reste de rester en orientation portrait.


Qu'est-ce qui fait toujours tourner? Dans mon exemple, je viens de faire 1er UIViewController reste uniquement en mode portrait et 2nd uiviewController peut être pivoté dans n'importe quelle direction. Lorsque j'exécute cette application, la 1ère UIViewController est uniquement en mode portrait. La 2e UIViewController peut faire pivoter dans n'importe quelle direction, mais il s'agit simplement de la mise en œuvre. Vous pouvez le limiter aux instructions que vous voulez.


@uerceg, votre solution va bien parce que vous êtes "présentant" 2nd ViewController. Mais si nous allons "pousser" 2nd Controller, le comportement attendu n'est pas acheté. Je veux "pousser" ma 2e ViewController, pas «présent» s'il vous plaît aider à cet égard.


Ou en d'autres termes, si je change de code de: - (ibaction) gotoSecondViewController: (id) Sender {secondviewController * SVC = [[[SECONDEVIEWCONTROLLER ALLOC] initwithnibName: @ "secondviewcontroller": nil]; [auto-cadeauViewController: SVC animé: Aucun achèvement: nil]; } to - (ibaction) gotoSecondViewController: (id) Sender {secondviewController * svc = [[DeuxièmeViewcontroller ALLOC] initwithnibname: @ "secondviewcontroller": nil]; [Self PushViewController: SVC Animé: Non]; } Ensuite, vous vivrez le même mauvais résultat que je connais.


À partir de votre orientation de code change, mais incapable de changer le cadre. Pouvez-vous s'il vous plaît dites-moi où je suis à la traîne



0
votes

une solution simple:

Mise en œuvre: - (Nsuinteger) supportéinterfaceOrientsOrients

Lorsqu'il est demandé d'appdelegate.m

- (Nsuinteger) Application: (UIAPPlication *) Application PrincipaleInterfaceOrientationsForWindow: (UiWindow *) Fenêtre

Pour plus de détails déjà répondu ici: iOS 6 Paysage et portrait Orientation


0 commentaires

2
votes

Selon votre description, le contrôleur de première vue a poussé dans le contrôleur de navigation. Votre méthode Définition de DoTutoroTatate code> et supporté d'interface de support code> est absolument correct. Pendant les changements d'orientation, le dépistage de votre contrôleur de navigation n'a tiré que le déclenchement et ne fera pas tiré votre premier contrôleur d'affichage (enfant de contrôleur d'enfant) DoTutorotate. Vous devez donc Catégorie Code> NavigationController dans votre contrôleur d'affichage ou dans un fichier séparé et importer dans le cas où cela est nécessaire. Code comme ci-dessous pour la catégorie contrôleur d'uoinavigation.

.h Fichier Avez-vous ce code P>

  #import "UINavigationController+autoRotate.h"

@implementation UINavigationController (autoRotate)

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}


0 commentaires