Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 仅在设备上使用iPad扭曲UIImageView_Ios_Xcode_Ipad_Uiimageview_Uiimage - Fatal编程技术网

Ios 仅在设备上使用iPad扭曲UIImageView

Ios 仅在设备上使用iPad扭曲UIImageView,ios,xcode,ipad,uiimageview,uiimage,Ios,Xcode,Ipad,Uiimageview,Uiimage,我有一个1024像素宽,120像素高的.png图像,它要横跨iPad屏幕的底部(在横向模式下) 我有意使图像视图的大小与图像分辨率相同,以便不执行大小调整,并且图像像素与屏幕像素之间的比例为1:1。在100%缩放的iPad模拟器上,png显示完全相同,这是它应该显示的。当我在iPad1上测试时,图像会失真,就像iOS试图对图像重新采样一样。下面是从设备上截取的屏幕截图 如果输出UIImageView边界,则获得预期的宽度和高度。关于为什么会发生这种情况,以及为什么失真不会出现在模拟器上,有什么想

我有一个1024像素宽,120像素高的.png图像,它要横跨iPad屏幕的底部(在横向模式下)

我有意使图像视图的大小与图像分辨率相同,以便不执行大小调整,并且图像像素与屏幕像素之间的比例为1:1。在100%缩放的iPad模拟器上,png显示完全相同,这是它应该显示的。当我在iPad1上测试时,图像会失真,就像iOS试图对图像重新采样一样。下面是从设备上截取的屏幕截图

如果输出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和programmed得到了相同的结果

编辑:输出
po[[(id)UIApp keyWindow]递归描述]

<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>>

| 
|    | 
|    | 

如果UIImageView只绘制图像,那么与CoreGraphics中的所有绘制方法一样,坐标不是像素索引,而是绘制每个点的点。如果你画一条水平线,那么它的一半会被添加到上面的像素,一半会被添加到下面的像素

您仅在示例中看到这一点,因为您试图使用此模式,它具有非常精细的特性,因此抗锯齿具有您描述的效果


如果要显示与原始图形真实一致的图形,则必须自己绘制并禁用抗锯齿。或者可能添加一个CALayer作为子层,其内容属性设置为图像。

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

为了清楚地看到失真,直接转到链接图像可能更好:,您能否显示将图像放置在gdb中的代码暂停应用程序并粘贴到该命令的输出中:
po[[(id)UIApp keyWindow]recursiveDescription]
。目前我使用IB添加了它,但是我添加了之前的代码…@robmayoff我添加了这个输出。我想可能是这样的,但我使用了类似的“详细”图像,没有显示这种效果。为了测试它,我取了上面图像的一大块(大约1/3)并显示出来,结果很好。我在想,可能会有一些图像压缩在幕后进行的图像超过一定的大小?我会再等一天左右,然后标记为正确的答案,如果有人知道到底发生了什么。