Существует ли загрузчик с девятью патчами для iPhone?
-
16-09-2019 - |
Вопрос
В 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, когда вы устанавливаете одно или оба из этих значений, растягиваемая область вынуждена иметь высоту / ширину в один пиксель.