UIView фоновое изображение становится раздавленным - PullRequest
0 голосов
/ 07 мая 2011

В моем приложении для iPhone у меня есть UIView с мозаичным фоновым изображением, созданным с помощью view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]];

На моем устройстве iOS3.1, когда размер представления изменяется, фоновое изображение сдавливается - то есть, оно разбивает плитки столько же раз, но высота каждой плитки уменьшается. Вместо этого я хотел бы, чтобы каждая плитка оставалась одинакового размера, но количество повторов корректировалось в соответствии с новым размером представления. Если я очищаю фон, а затем сбрасываю его, проблема исправляется, но это кажется неэффективным решением проблемы. На симуляторе iOS4.3 он работает правильно.

Вот оригинальное изображение - 12 строк:

The original image

Вот что я вижу, когда меняю размер представления - оно все еще имеет 12 строк:

What I'm seeing - the image is squashed

В то время как вот что я действительно хотел бы увидеть - фон будет обрезан до 5 строк:

What I want to see - the image cropped

Есть идеи?

Ответы [ 2 ]

1 голос
/ 08 мая 2011

Свойство backgroundColor представления назначает цвет (или рисунок) для CALayer, который является основой для рисования представления.Вы можете изменить свойства CALayer, обратившись к свойству layer представления.

Просматривая Ссылку на класс CALayer Я вижу, что есть свойство с именем contentsGravity, которое:

Определяет, как содержимое приемника располагается в пределах его границ.

Указывает, что:

Возможные значения для contentsGravity показаны в « Содержание Значения гравитации ”.Значением по умолчанию является kCAGravityResize.

Это объясняет, почему ваше изображение уменьшается таким образом: по умолчанию оно изменяет размер изображения.Взглянув на другие значения гравитации содержимого , есть несколько вариантов, которые, вероятно, лучше всего подойдут вам:

kCAGravityTop: содержимое горизонтально центрировано сверхукрай прямоугольника границ.

kCAGravityCenter: содержимое горизонтально и вертикально центрировано в прямоугольнике границ.

'kCAGravityBottom': содержимое горизонтально центрировано по нижнему краюограничивает прямоугольник.

Я предполагаю, что kCAGravityTop, вероятно, то, что вы ищете, поэтому вы бы установили слой contentsGravity вашего вида следующим образом:

view.layer.contentsGravity = kCAGravityTop;
0 голосов
/ 17 мая 2011

Я нашел гораздо более простое решение:

view.contentMode = UIViewContentModeRedraw;
// instead of the default UIViewContentModeScaleToFill
...