Selon la documentation:
Vous utilisez cette méthode pour ajouter de la pac encarts à une image ou à modifier le cap des encarts d'une image. Dans les deux cas, vous recevez en retour une nouvelle image et de l'image d'origine reste intacte.
Pendant la mise à l'échelle ou le redimensionnement de l'image, les zones couvertes par un pac ne sont pas mis à l'échelle ou redimensionnées. Au lieu de cela, la zone de pixels ne sont pas couverts par la pac dans chaque direction est carrelé, de gauche à droite et de haut en bas, pour redimensionner l'image. Cette technique est souvent utilisée pour créer une variable de la largeur des boutons, qui conservent les mêmes coins arrondis mais dont le centre de la région augmente ou réduit en tant que de besoin. Pour de meilleures performances, utilisez une surface carrelée qui est une 1x1 pixel de la zone de la taille.
Donc, vous ne devez utiliser le montant de pixels que vous voulez faire unstretchable dans les valeurs de l' UIEdgeInsetsMake
fonction.
Disons que vous avez une image de 21x50 points (21x50 pixels en définition standard, 42x100 pixels dans la Rétine "@2x" définition) et que vous voulez cette image pour être extensible horizontalement, en gardant les 10 points sur la gauche et sur la droite intacte lors de l'étirement de l'image, mais seulement s'étirer le 1-point-large bande dans le milieu. Ensuite, vous utiliserez UIEdgeInsetsMake(0,10,0,10)
.
Ne vous embêtez pas qu'ils sont des flotteurs (c'est utile pour subpixelling redimensionnement par exemple, mais dans la pratique, vous devrez probablement utiliser des entiers (ou de flotteurs avec pas de parties décimales)
Attention, c'est un iOS5+ seule méthode, pas disponible avant iOS5 (en fait ne devrait pas poser à ce sujet ici car c'est encore sous NDA). Si vous utilisez des pré-iOS5 SDK, utilisez stretchableImageWithLeftCapWidth:topCapHeight:
à la place.
[MODIFIER] astuce j'utilise depuis un certain temps, comme je ne me souviens jamais de l'ordre dans lequel les champs de l' UIEdgeInsets
de la structure et de l'ordre dans lequel nous sommes censés passer les arguments à l' UIEdgeInsetsMake
- fonction, je préfère utiliser le "désigné inits" la syntaxe ressemble à ceci:
UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };
Ou quand un cast explicite est nécessaire:
UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){
.left = 50, .right = 50,
.top = 10, .bottom = 10
}];
Je trouve ça plus lisible, surtout pour être sûr que nous ne mélangez pas différentes frontières/les directions!