Есть ли девятиплатный загрузчик для iPhone? - PullRequest
25 голосов
/ 16 июля 2009

В Android есть хороший способ определения растягиваемых изображений, который называется «девять патчей». См. эти документы для описания концепции. Идея состоит в том, чтобы окружить изображение в формате png рамкой в ​​1 пиксель, где вы можете определить растягиваемые области и размеры отступа изображения. Это просто великолепно, и я бы хотел использовать эту идею в своем приложении для iPhone. Перед тем, как написать свой собственный патч для девяти патчей в загрузчик UIImage, я подумал, посмотрю, если он уже существует. Google не возвращает никаких результатов, поэтому у меня нет особой надежды, но спрашивать не мешает, верно? : -)

РЕДАКТИРОВАТЬ: Люди, я ценю ответы, но я знаю о stretchableImageWithLeftCapWidth.... Я ищу код, который принимает путь @"foo.9.png" и возвращает растягиваемый UIImage. Этот код, несомненно, будет использовать stretchableImageWithLeftCapWidth... внутри. Я уверен, что мог бы написать код сам, используя этот метод. Но я спрашиваю, сделал ли это кто-то еще.

Ответы [ 4 ]

24 голосов
/ 02 июня 2010

Я получил электронное письмо от программного обеспечения Tortuga22, в котором сообщалось, что они создали такую ​​библиотеку и выпустили ее по лицензии Apache:

Объявление: http://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

Исходный код: http://github.com/tortuga22/Tortuga22-NinePatch

Пример использования:

// loads-and-caches ninepatch and rendered image of requested size
UIImage buttonImg = [TUNinePatchCache imageOfSize:buttonSize 
                                forNinePatchNamed:@"buttonNormalBackground"];
[self.buttonNeedingBackground setImage:buttonImg
                       forControlState:UIControlStateNormal];
4 голосов
/ 13 августа 2010

Также посмотрите на свойство contentStretch UIView. Он более надежный и корректный, чем stretchableImageWithLeftCapWidth. По сути, это работает, просто определяя растягиваемый прямоугольник внутри вашего изображения и автоматически создавая масштабированный патч из девяти. Этот внутренний прямоугольник может быть чем угодно - он даже не должен находиться в центре изображения. Плюс в отличие от stretchableImage этот метод будет правильно сжимать графику и вести себя как ожидается для графики с подсветкой или глянцем. Я не могу придумать ни одного реального приложения, где бы вы хотели большего, чем это.

3 голосов
/ 16 июля 2009

Да UIImage поддерживает что-то подобное. См

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight и документация для leftCapWidth и topCapHeight

в основном изображение не растягивается в области leftCapWidth пикселей от левого и правого края и topCapHeight пикселей сверху и снизу. Когда изображение масштабируется, область внутри этих пределов растягивается.

1 голос
/ 23 августа 2009

Все UIImage изображения поддерживают это изначально. По умолчанию все изображения растягиваются, но вы можете установить ограничения с помощью свойств leftCapWidth и topCapHeight или сгенерировать одно из существующих UIImage с помощью метода - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight.

Обратите внимание, что в реализации Apple, когда вы устанавливаете одно или оба из этих значений, растягиваемая область должна иметь высоту / ширину в один пиксель.

...