web-dev-qa-db-fra.com

Scale UIView et tous ses enfants

J'ai une UIView avec environ 50 boutons UIB. Toutes les positions des boutons ont été données en pixels, par rapport au coin supérieur gauche de mon UIView principal.

Toutes les images (d'arrière-plan) utilisées dans la vue sont disponibles en résolution supérieure. Comme je porte mon application de l'iPhone vers l'iPad, je voudrais augmenter la taille effective des pixels de l'UIView.

Maintenant, je cherche un moyen de mettre à l'échelle l'ensemble de UIView par un facteur 2 *. Est-ce possible sans détruire la position des éléments intérieurs?

Pour info, l'UIView est conçu dans un fichier NIB en XCode. Mais cela ne me dérange pas si cela peut être fait par programme.

51
andreas

J'ai fini par utiliser

self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2);

Cela m'a permis de conserver le design créé dans Interface Builder.

Malheureusement, la netteté de l'image en souffre dans ce cas, mais c'est un petit prix à payer par rapport au scriptage de la conception entière par programmation.

116
andreas

Mise à jour pour Swift 3.0

self.view.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)
11
sahiljain

Pour Swift 4.0, zoom 2x:

myView.transform = CGAffineTransform.identity.scaledBy(x: 2, y: 2)
4
huync

Vous pouvez d'abord créer par programmation ces boutons comme par exemple créer ces boutons à l'aide de la méthode CGRectMake et en indiquant la largeur et la hauteur à X et Y et multiplier par 2 si l'ipad est détecté comme pour Origin, il devrait changer respectivement aussi, pourrait provoquer un chevauchement s'il est trop proche les uns des autres

Edit: Tout dépend de votre logique, je ne sais pas trop

2
Danny Lin