Вопрос

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

Редактировать: Ребята, я ценю ответы, но я знаю о stretchableImageWithLeftCapWidth....Я ищу код, который использует путь @"foo.9.png" и возвращает растягиваемый UIImage.Этот код, несомненно, будет использовать stretchableImageWithLeftCapWidth... внутренне.Я уверен, что мог бы сам написать код, используя этот метод.Но я спрашиваю, сделал ли это уже кто-то другой.

Это было полезно?

Решение

Я получил электронное письмо от Tortuga22 software, которое сообщило мне, что они создали такую библиотеку и выпустили ее под лицензией 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];

Другие советы

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

ДА UIImage поддерживает что-то подобное.Видишь

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top