Подтвердить что ты не робот

Есть ли 9-патч-загрузчик для iPhone?

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

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

4b9b3361

Ответ 1

Я получил электронное письмо от программного обеспечения 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];

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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