500 votes

Comment développer ou migrer des applications pour iPhone 5 résolution de l’écran ?

Le nouvel écran de l’iPhone 5 a un nouveau format et une nouvelle résolution (pixels 640 x 1136).

Ce qui est nécessaire pour développer des nouvelles ou des applications déjà existantes à la nouvelle taille d’écran de transition ?

Que devrions-nous garder à l’esprit de faire des applications « universel » pour les écrans plus âgés et les nouvelles proportions ?

484voto

Filip Radelic Points 18860
  1. Télécharger et installer la dernière version de Xcode.
  2. Set de 4 pouces, image de lancement de votre application. C'est la façon dont vous obtenez 1136 px hauteur de l'écran (sans elle, vous obtiendrez de 960 px avec des bandes noires en haut et en bas).
  3. Test de votre application, et j'espère ne rien faire d'autre, car tout devrait fonctionner comme par magie si vous aviez mis de redimensionnement automatique des masques correctement.
  4. Si vous n'avez pas le cas, ajustez vos listes avec une bonne taille automatique des masques ou regarder dans la Mise en page Automatique si vous ne voulez soutenir iOS 6 aller de l'avant.
  5. Si il ya quelque chose que vous avez à faire pour l'écran plus grand, plus précisément, alors il semble que vous avez pour vérifier la hauteur de l' [[UIScreen mainScreen] bounds] (ou applicationFrame, mais alors vous devez envisager d'état hauteur de la barre si elle est présente) comme il semble y avoir aucune API spécifique pour cela.

Exemple:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
    // code for 4-inch screen
} else {
    // code for 3.5-inch screen
}

À noter également: L'auto-rotation de l'API a changé complètement, jeter un oeil à ainsi si votre application prend en charge la rotation des autres que par défaut.

117voto

Sanjay Chaudhry Points 2469

Si vous disposez d'une application construite pour l'iPhone 4S ou plus tôt, ça va fonctionner letterbox sur l'iPhone 5.

Pour adapter votre application pour le nouveau plus haut de l'écran, la première chose à faire est de changer l'image de lancement: Default-568h@2x.png. Sa taille doit être de 1 136 x 640 (Hxl). Yep, d'avoir l'image par défaut dans la nouvelle taille de l'écran est la clé pour permettre à votre application de prendre la totalité de nouvelle iPhone 5 écran.

(À noter que la convention de nommage ne fonctionne que pour l'image par défaut. Nommant une autre image "Image-568h@2x.png" ne provoquera pas qu'il soit chargé à la place de "Image@2x.png". Si vous avez besoin de charger des images différentes pour différentes tailles d'écran, vous devrez le faire par programmation.)

Si vous êtes très chanceux, peut-être... mais en toute probabilité, vous aurez à faire quelques pas de plus.

  • Assurez-vous, votre Xibs/Vues de l'utilisation de l'auto-mise en page pour redimensionner eux-mêmes.
  • L'utilisation des ressorts et des entretoises pour redimensionner les points de vue.
  • Si ce n'est pas assez bon pour votre application, de la conception de votre xib/storyboard pour une taille d'écran et de repositionner par programme pour les d'autres.

Dans le cas extrême (quand aucun de ce qui précède suffit), la conception de deux Xibs et chargez-la dans la-vue-contrôleur.

Pour détecter la taille de l'écran:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

30voto

onegray Points 2226

La seule chose vraiment nécessaire à faire est d'ajouter une image de lancement nommé "Default-568h@2x.png" les ressources de l'application, et dans le cas général, (si vous êtes assez chanceux) l'application fonctionne correctement.

Dans le cas où l'application ne gère pas les événements tactiles, alors assurez-vous que la clé de fenêtre est à la bonne taille. La solution de contournement consiste à définir la trame approprié:

[window setFrame:[[UIScreen mainScreen] bounds]]

Il y a d'autres questions ne sont pas liées à la taille de l'écran lors de la migration vers iOS 6. Lire iOS 6.0 Notes de Version pour plus de détails.

22voto

SomaMan Points 2215

Parfois (pour la pré-storyboard apps), si la mise en page va être assez différents, il est intéressant de définir un autre xib en fonction de l'appareil (voir cette question - vous avez besoin de modifier le code de traiter avec l'iPhone 5) dans le viewController init, car aucune quantité de tourner avec d'un redimensionnement automatique des masques de travail si vous avez besoin de différents graphiques.

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    NSString *myNibName;
    if ([MyDeviceInfoUtility isiPhone5]) myNibName = @"MyNibIP5";
    else myNibName = @"MyNib";

    if ((self = [super initWithNibName:myNibName bundle:nibBundleOrNil])) {
        ...etc

Utile pour les applications qui ciblent les anciennes versions de systèmes d'exploitation.

20voto

Manni Points 4213

Ici vous pouvez trouver un bon tutoriel (pour MonoTouch, mais vous pouvez utiliser l'information pour les Non-MonoTouch-projets, aussi):
http://redth.info/get-your-monotouch-apps-ready-for-iphone-5-ios-6-today/

  1. Créer une nouvelle image pour votre démarrage/l'écran par défaut (640 x 1136 pixels) avec le nom de "Default-568h@2x.png"

  2. Dans le Simulateur iOS, allez dans le Matériel -> menu de l'Appareil, et sélectionnez "iPhone (Retina de 4 pouces)"

  3. Créer d'autres images, par exemple, des images de fond

  4. Détecter l'iPhone 5 pour charger de nouvelles images:

public static bool IsTall
{
    get {
        return UIDevice.currentDevice.userInterfaceIdiom
                    == UIUserInterfaceIdiomPhone
                && UIScreen.mainScreen.bounds.size.height
                    * UIScreen.mainScreen.scale >= 1136;
    }
}

private static string tallMagic = "-568h@2x";
public static UIImage FromBundle16x9(string path)
{
    //adopt the -568h@2x naming convention
    if(IsTall())
    {
        var imagePath = Path.GetDirectoryName(path.ToString());
        var imageFile = Path.GetFileNameWithoutExtension(path.ToString());
        var imageExt = Path.GetExtension(path.ToString());
        imageFile = imageFile + tallMagic + imageExt;
        return UIImage.FromFile(Path.Combine(imagePath,imageFile));
    }
    else
    {
        return UIImage.FromBundle(path.ToString());
    }
}

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