Можно ли определить, растягивается ли UIImage? - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь повторно использовать небольшой фрагмент кода внутри класса пользовательских кнопок. Чтобы это работало, мне нужно передать не растягиваемые изображения (значок) или растягиваемое изображение («swoosh»). В коде мне нужно установить прямоугольник для рисования высоты, поэтому в идеале я хотел бы просто определить, растягивается ли изображение или нет? Если это не так, я рисую его по размеру изображения, если нет - рисую по границам содержащего прямоугольника.

Из моего исследования пока capInsets (iOS 5) или leftCapWidth / topCapHeight (до iOS 5) для этого не годятся.

Есть ли что-то скрытое в ядре или информация о кварце, которую я могу использовать?

Просто любопытно, сейчас я пишу код с дополнительным параметром.

** С тех пор я прочитал CGImageRef и эквивалент CI **

Насколько я могу судить, такой информации, которую мы могли бы получить, чтобы идентифицировать такие образы, нет, поэтому возникает вопрос: откуда ОС знает?

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Нет способа обнаружить это, если у вас нет интенсивного анализа изображения (который не будет на 100% правильным).UIImage - это, по сути, несколько пикселей с метаинформацией, все полученные из файла, из которого вы их загрузили.Никакие форматы файлов не будут иметь эту информацию.

Однако вы можете закодировать некоторую информацию в имя файла изображения.Если у вас есть растягиваемое изображение с именем foo.png, почему бы не назвать его foo.stretch.png?Ваши подпрограммы загрузки могут анализировать имя файла и извлекать мета-информацию, которую вы можете связать с UIImage (см. http://labs.vectorform.com/2011/07/objective-c-associated-objects/ для связанных объектов), или создав свой собственный класс, который объединяет UIImage с мета-информацией.

Удачи в ваших исследованиях.

0 голосов
/ 27 марта 2012

Когда вы создаете UIImage *, его свойство .size является абсолютным.Если вы имеете в виду растягивается на ваш вид кнопки.просто проверьте шкалу, например.

- (BOOL) stretchableImage:(UIImage*)aImage toView:(UIView*)aView{
    CGFloat scaleW = aView.size.width/aImage.size.width;
    CGFloat scaleH = aView.size.height/aImage.size.height;

    if (scaleW == scaleH){
       if (scaleW < 1)
           return YES;
    }

    return NO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...