Y at-il un chargeur neuf patch pour iPhone?
-
16-09-2019 - |
Question
Android a une belle façon de définir les images étirables appelle un neuf patch. Voir ces documents pour une description du concept . L'idée est d'entourer une image .png avec une bordure de 1 pixel où vous pouvez définir les zones extensibles et les dimensions de remplissage de l'image. Ceci est absolument génial et je voudrais utiliser l'idée dans mon application iPhone. Avant d'écrire mon propre neuf patch pour UIImage chargeur Je pensais voir s'il en existe déjà. Google ne renvoie aucun résultat donc je n'ai pas beaucoup d'espoir, mais il n'a pas de mal à demander, non? : -)
EDIT: Mesdames et messieurs, je vous remercie de la réponse, mais je sais à propos stretchableImageWithLeftCapWidth...
. Je suis à la recherche du code qui prend un chemin @"foo.9.png"
et retourne un UIImage
étirables. Ce code sera sans aucun doute utiliser stretchableImageWithLeftCapWidth...
en interne. Je suis sûr que je pourrais écrire le code moi-même en utilisant cette méthode. Mais je me demande si quelqu'un d'autre l'a déjà fait.
La solution
J'ai reçu un e-mail à partir du logiciel Tortuga22 qui m'a informé qu'ils ont créé une telle bibliothèque et publié sous la licence Apache:
Annonce: http://blog.tortuga22.com / 2010/05/31 / annonce-tortuga-22-ninepatch /
Code source: http://github.com/tortuga22/Tortuga22-NinePatch
Exemple d'utilisation:
// loads-and-caches ninepatch and rendered image of requested size
UIImage buttonImg = [TUNinePatchCache imageOfSize:buttonSize
forNinePatchNamed:@"buttonNormalBackground"];
[self.buttonNeedingBackground setImage:buttonImg
forControlState:UIControlStateNormal];
Autres conseils
Regardez aussi la propriété de contentStretch UIView. Il est plus robuste et bien comportés que stretchableImageWithLeftCapWidth. En gros, cela fonctionne en définissant simplement le rectangle extensible à l'intérieur de votre image et de créer automatiquement un neuf-patch échelle. Ce rectangle interne peut être quelque chose - il n'a même pas être au centre de l'image. De plus contrairement stretchableImage cette méthode correctement et réduire graphiques se comporter comme prévu pour les graphiques avec éclairage ou brillant. Je ne peux pas penser à toute application dans le monde réel où vous voulez plus que cela.
Oui UIImage
ne supporte quelque chose comme ça. Voir
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
et la documentation leftCapWidth et topCapHeight
essentiellement l'image est étirée dans la zone de pixels leftCapWidth à partir du bord gauche et à droite et topCapHeight pixels à partir du haut et du bas. Lorsque l'image est mise à l'échelle de la zone à l'intérieur de ces limites est soumis à un étirage.
Toutes les images UIImage
supportent nativement. Par défaut, les images entières est extensible, mais vous pouvez fixer des plafonds avec les propriétés de leftCapWidth
et topCapHeight
ou vous pouvez générer un à partir d'un UIImage
existant avec la méthode - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
.
Notez que la mise en œuvre dans la pomme de, lorsque vous définissez un ou les deux de ces valeurs, la zone étirable est forcé d'être un seul pixel haute / large.