2011-12-25 67 views
1

我有一个宽度为1024像素,高度为120像素的.png图像,其目的是跨越iPad屏幕的底部(横向模式)。 enter image description hereiPad仅在设备上扭曲UIImageView

我故意使图像视图与图像分辨率大小相同,以便不执行大小调整,图像像素与屏幕像素之间的比例为1:1。在100%缩放的iPad模拟器上,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>> 
+0

为了清楚地看到失真,直接转到链接的图像可能会更好:[png](http://i.stack.imgur.com/s1Ibd.png),[iPad屏幕截图](http ://i.stack.imgur.com/fl6Ti.png) – 2011-12-25 07:42:49

+0

可以显示放置图像的代码 – shannoga 2011-12-25 07:58:27

+0

将应用程序暂停在gdb中并粘贴到此命令的输出中:'po [[(id)UIApp keyWindow] recursiveDescription]'。 – 2011-12-25 08:00:23

回答

0

我仍然不知道是什么导致了失真,但是如果我将图像大小从1024x120修剪到1023x120,我不会发生任何失真,右侧只有一个微小的1px间隙。

+0

在将此标记为正确答案之前,我会再等一天左右,万一有人知道这里发生了什么。 – 2011-12-25 18:39:23

2

输出AFAIK一个的UIImageView刚刚绘制图像和CoreGraphics在所有的绘图方法,如坐标不在像素索引,但点周围的每个点绘制。如果你绘制一条水平线,那么它的一半会被添加到上面的像素中,其中一半会被添加到下面的像素中。

您只能在您的示例中看到这一点,因为您试图使用具有如此精细功能的模式,因此消除锯齿效果会产生您所描述的效果。

如果您想要显示的图形与原始图像一致,那么您必须自己绘制图形并禁用消除锯齿功能。或者可能通过将CALayer添加为内容属性设置为图像的子图层。

+0

我认为这可能是这种情况,但我使用了类似的“详细”图片,但没有显示出这种效果。为了测试它,我拿了上面图像的一个块(大约1/3),并显示它,并且它很好。我在想,也许在某种尺寸的图像背后会出现一些图像压缩? – 2011-12-25 08:55:50