Intereting Posts
BitmapFactory.decodeResource возвращает значение null Вызов функции startActivity () извне контекста активности требует FLAG_ACTIVITY_NEW_TASK Android: добавьте разделитель между элементами в RecyclerView Touchend не стреляет после касания Java.net.SocketException: recvfrom failed: ECONNRESET (сброс соединения с помощью одноранговой сети) через WIFI Android – вспышка вспышки камеры в неправильных интервалах на разных устройствах Определите, имеет ли браузер клавиатуру / клавиши со стрелками на веб-странице Невозможно повторить запрос с неповторяемым объектом запроса Theme.Holo.Light.DarkActionBar на сотах Как остановить изменение ориентации, когда индикатор прогресса вращается в андроиде Редакторы Как получить текущее местоположение элемента ActionBar MenuItem? Ожидание намерения в уведомлении не работает Не удалось найти свойство processManifest на com.android.build.gradle.internal.api.ApplicationVariantImpl Osmdroid – отображать плитки больше

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

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

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

Solutions Collecting From Web of "Есть ли 9-патч-загрузчик для iPhone?"

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

Также смотрите свойство contentStretch UIView. Он более надежный и хорошо управляемый, чем растяжимыйImageWithLeftCapWidth. В основном, это работает, просто определяя растяжимый прямоугольник в вашем изображении и автоматически создавая масштабированный девятикратный патч. Этот внутренний прямоугольник может быть любым – он даже не должен находиться в центре изображения. Плюс в отличие от 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, когда вы устанавливаете одно или оба из этих значений, растягиваемая область вынуждена быть одним пикселом в высоту / в ширину.