iPad искажает UIImageView только на устройстве - PullRequest
1 голос
/ 25 декабря 2011

У меня есть изображение .png шириной 1024 пикселя и высотой 120 пикселей, которое должно занимать нижнюю часть экрана iPad (в альбомном режиме). enter image description here.

Я намеренно имею вид изображения того же размера, что и разрешение изображения, поэтому изменение размера не выполняется, и соотношение пикселей изображения и пикселей экрана составляет 1: 1.На симуляторе iPad при 100% увеличении png выглядит точно так же, как и должно быть.Когда я тестирую его на своем iPad 1, изображение искажается, как будто iOS пытается пересчитать изображение.Ниже приведен снимок экрана, полученный с устройства enter image description here.

. Если я выведу границы UIImageView, я получу ожидаемую ширину и высоту.Любые идеи о том, почему это происходит, и почему искажения не появляются на симуляторе?

РЕДАКТИРОВАТЬ: код, используемый для вставки ImageView:

tile = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tile.png"]];
[tile setFrame:CGRectMake(0, 648, tile.bounds.size.width, tile.bounds.size.height)];
[self.view addSubview:tile];

Я получил те же результаты, используя обаIB и запрограммировано.

РЕДАКТИРОВАТЬ: Выход po [[(id)UIApp keyWindow] recursiveDescription]

<UIWindow: 0x13f200; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x127df0>>
| <UIView: 0x14fd40; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x14ffe0>>
|    | <UIImageView: 0x14f900; frame = (0 648; 1024 120); autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x14f940>>
|    | <UIImageView: 0x14e210; frame = (125 666; 774 102); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x14daa0>>

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

AFAIK UIImageView просто рисует изображение, и, как и все методы рисования в CoreGraphics, координаты представляют собой не пиксельный индекс, а точки, вокруг которых рисуется каждая точка.Если вы рисуете горизонтальную линию, то половина ее добавляется к пикселям выше, половина - к пикселям ниже.

Вы видите это только в своем примере, потому что пытаетесь использовать этот шаблон с такимтонких функций, и поэтому сглаживание дает эффект, который вы описываете.

Если вы хотите показать графику в соответствии с оригиналом, вам придется нарисовать ее самостоятельно и отключить сглаживание.Или, возможно, добавив CALayer в качестве подслоя со свойством содержимого, установленным в качестве изображения.

0 голосов
/ 25 декабря 2011

Я до сих пор не знаю, что вызывает искажение, но если я урежу размер изображения с 1024x120 до 1023x120, я не получу никаких искажений, только небольшой зазор в 1 пиксель справа.

...