J'ai une texture vraiment plus courte que mon UIButton.
J'ai cette texture:
Et je devrais créer ce bouton:
Comment devrais-je étirer (pas carreler) cette texture? Étirement dans le sens horizontal
Thnx
D'après les exemples d'images que vous avez fournis, je suis presque sûr que vous recherchez les UIImage
resizableImageWithCapInsets:
UIImage *originalImage = [UIImage imageNamed:@"myImage.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
UIImage *stretchableImage = [originalImage resizableImageWithCapInsets:insets];
[myButton setBackgroundImage:stretchableImage forState:UIControlStateNormal];
// the image will be stretched to fill the button, if you resize it.
Les valeurs de la structure UIEdgeInsets déterminent les marges que vous ne souhaitez pas étirer. Vos valeurs gauche et droite pourraient être à peu près aussi larges:
Les valeurs supérieures et inférieures peuvent être soit 0 (si vous ne voulez pas redimensionner le bouton verticalement), soit probablement la moitié de la hauteur totale.
Avec Xcode 6 (et iOS7 + cible), vous pouvez utiliser l'éditeur de découpage lorsque vous travaillez avec des ressources d'images. Basculez en mode de découpage avec Editeur -> Afficher le menu de découpage ou appuyez sur Afficher le découpage bouton lorsque vous sélectionnez une image spécifique avec l'éditeur (illustré ci-dessous).
Ensuite, vous pouvez sélectionner l'image pour une échelle d'affichage spécifique et faire glisser les règles ou modifier manuellement les valeurs des encarts.
Après cela, vous pouvez sélectionner cette image dans Interface Builder pour UIButton Image d'arrière-plan (La représentation du bouton IB peut sembler mauvaise, mais elle devrait être correcte lors de l'exécution).
Mes boutons semblent bien (exécutant le simulateur iOS 7.1 et le périphérique iOS 8).
Cela Apple doc link pourrait être utile.
En ne carrelant pas, je suppose que vous ne pouvez donc pas utiliser
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
La façon de faire ce que vous voulez est d'utiliser:
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0); // should be proportionally larger
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, (CGRect){{0,0}, newSize}, [yourImage CGImage]);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
Ou en utilisant Images extensibles:
UIImage* imgbkg =[[UIImage imageNamed: @"my_bkg_image.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:10];
[_button setBackgroundImage: imgbkg forState: UIControlStateNormal];
Utilisez si vous ne voulez pas étirer certains côtés.
Utilisation stretchableImageWithLeftCapWidth:topCapHeight:
méthode.
Se référer: https://github.com/boctor/idev-recipes/tree/master/StretchableImages