52 votes

iOS 8 méthodes de rotation Deprecation - Compatibilité avec les versions antérieures

Dans iOS 8, les méthodes de l'interface de rotation sont obsolètes. Cela comprend:

  • willRotateToInterfaceOrientation:duration:
  • didRotateFromInterfaceOrientation:
  • willAnimateRotationToInterfaceOrientation:duration:

Les méthodes de remplacement comprennent:

  • willTransitionToTraitCollection:withTransitionCoordinator:
  • viewWillTransitionToSize:withTransitionCoordinator:

Si la nouvelle rotation méthodes ne sont pas mises en œuvre, et un projet est compilé avec l'iOS 8 SDK, le point de vue des contrôleurs aura pas de recevoir des appelsà l'obsolète les méthodes de la rotation.

Mon souci est: est-ce Ce qui se passe à une application déjà dans l'AppStore construit avec le SDK iOS 7? Sera le obsolète rotation des méthodes encore être appelé sur un iOS 8 appareil ou pas?

EDIT:

La rotation méthodes sont encore appelé, mais il existe quelques changements/problèmes/bugs d'iOS 8.

Aussi UIScreen est maintenant l'interface orientée

36voto

Camo Points 790

Je viens d'avoir ce problème et je voulais utiliser les mêmes méthodes que j'utilisais auparavant (du moins pour le moment), c'est donc ce que j'ai fait.

 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    //The device has already rotated, that's why this method is being called.
    UIInterfaceOrientation toOrientation   = [[UIDevice currentDevice] orientation];
    //fixes orientation mismatch (between UIDeviceOrientation and UIInterfaceOrientation)
    if (toOrientation == UIInterfaceOrientationLandscapeRight) toOrientation = UIInterfaceOrientationLandscapeLeft;
    else if (toOrientation == UIInterfaceOrientationLandscapeLeft) toOrientation = UIInterfaceOrientationLandscapeRight;

    UIInterfaceOrientation fromOrientation = [[UIApplication sharedApplication] statusBarOrientation];

    [self willRotateToInterfaceOrientation:toOrientation duration:0.0];
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        [self willAnimateRotationToInterfaceOrientation:toOrientation duration:[context transitionDuration]];
    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        [self didRotateFromInterfaceOrientation:fromOrientation];
    }];

}
 

Je ne suis toujours pas sûr de devoir utiliser ceci en dehors du bloc animation car je n'ai pas la durée.

     [self willRotateToInterfaceOrientation:toOrientation duration:0.0];
 

19voto

mluisbrown Points 2455

Les méthodes de rotation sont obsolètes dans le SDK iOS 8. Cela n'aura aucun effet sur les applications construites avec le SDK iOS 7, même sous iOS 8 et probablement plusieurs versions futures d'iOS.

Par exemple, la propriété font de UIButton est obsolète depuis iOS 3.0 et est toujours disponible dans iOS 7.0.

6voto

Joey Points 2141

Moi aussi, j'ai une application sur l'App Store qui a été construit pour iOS 7 et je souhaite conserver la compatibilité avec iOS 7, mais aussi prend en charge iOS 8. J'ai trouvé que si vous ciblez iOS 7, mais votre base SDK est réglé sur la dernière version (8), vous n'obtenez pas les mises en garde dans Xcode sur l'utilisation de l'amorti les méthodes de la rotation. Et en fait, ces méthodes sont encore appelée lors de l'exécution sur iOS 8 appareils. Seulement quand j'ai décider d'arrêter le support de iOS 7-je remplacer ces méthodes avec la taille appropriée des classes de l'API. Parce que la rotation méthodes sont encore appelée sur iOS 8, je ne vois aucune raison de mettre en œuvre la nouvelle API dans cette situation, il est très facile à prendre en charge les deux Systèmes d'exploitation.

Dans l'onglet paramètres Généraux, en vertu de Déploiement Info, votre Cible de Déploiement doit être fixée au plus tôt de l'OS que vous souhaitez soutenir (dans mon cas 7.0), puis dans les Paramètres de construction en vertu des Architectures, vous aurez probablement souhaitez définir la Base SDK pour plus tard, iOS (iOS 8.0), qui est défini par défaut. C'est la bonne configuration si vous souhaitez soutenir iOS 7 et 8.

A noter que pour être techniquement précis, vous n'avez pas à changer votre Cible de Déploiement à 7. Le obsolète rotation méthodes sont encore appelée lors de l'exécution sur iOS 8. Mais bien sûr, vous aurez besoin de changer pour prendre en charge les anciens Os.

2voto

Julian Król Points 1596

Je vérifierais que ce cas spécifique a 100% de confiance, mais je ne m'attends pas à des problèmes. Je vous recommanderais également de regarder la session 216 Building Adaptive Apps with UIKit de WWDC 2014 pour obtenir plus d'informations. Il semble que les méthodes dépréciées ne soient pas appelées. L'application doit donc être mise à jour pour fonctionner correctement avec les appareils exécutant iOS 8.

1voto

fabb Points 3471

Les méthodes de rotation fonctionnent toujours MAIS il existe d'autres problèmes:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X