UIView фоновое изображение становится раздавленным
В моем приложении для iPhone у меня есть UIView с мозаичным фоновым изображением, созданным с помощью view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]];
На моем устройстве iOS3.1, когда размер представления изменяется, фоновое изображение сдавливается - то есть, оно мозаично повторяется столько же раз, но высота каждой плитки уменьшается. Вместо этого я бы хотел, чтобы каждая плитка оставалась одинакового размера, но количество повторов корректировалось в соответствии с новым размером представления. Если я очищаю фон, а затем сбрасываю его, проблема исправляется, но это кажется неэффективным решением проблемы. На симуляторе iOS4.3 все работает правильно.
Вот оригинальное изображение - 12 строк:
Вот что я вижу, когда меняю размер представления - оно все еще имеет 12 строк:
Тогда как вот что я действительно хотел бы увидеть - фон будет обрезан до 5 строк:
Есть идеи?
2 ответа
Я нашел гораздо более простое решение:
view.contentMode = UIViewContentModeRedraw;
// instead of the default UIViewContentModeScaleToFill
Виды backgroundColor
свойство присваивает цвет (или рисунок) CALayer
это основа для рисования вида. Вы можете изменить свойства CALayer, обратившись к layer
Свойство зрения.
Просматривая ссылку на класс CALayer, я вижу, что есть свойство с именем contentsGravity
тот:
Определяет, как содержимое получателя находится в пределах его границ.
Это указывает на то, что:
Возможные значения для
contentsGravity
отображаются в разделе "Значения гравитации содержимого ". Значением по умолчанию являетсяkCAGravityResize
,
Это объясняет, почему ваше изображение уменьшается таким образом: по умолчанию оно изменяет размер изображения. Взглянув на другие значения Gravity Contents, можно выбрать несколько вариантов:
kCAGravityTop
: Содержимое горизонтально центрируется по верхнему краю прямоугольника границ.
kCAGravityCenter
: Содержание горизонтально и вертикально центрировано в прямоугольнике границ.'kCAGravityBottom': содержимое горизонтально центрировано у нижнего края прямоугольника границ.
Я предполагаю, что kCAGravityTop
это, вероятно, то, что вы ищете, поэтому вы должны установить слой вашего представления contentsGravity
как это:
view.layer.contentsGravity = kCAGravityTop;