2011-12-25 33 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