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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top