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;
Другие вопросы по тегам