2009-04-24 111 views
7

我正在嘗試使用stretchableImageWithLeftCapWidth調整圖片大小:它可以在模擬器上工作,但在設備上會出現垂直綠色條。使用stretchableImageWithLeftCapWidth調整圖片大小

我試圖使用imageNamed,imageWithContentOfFile和imageWithData lo加載圖像,它不會改變。

UIImage *bottomImage = [[UIImage imageWithData: 
    [NSData dataWithContentsOfFile: 
    [NSString stringWithFormat:@"%@/bottom_part.png", 
    [[NSBundle mainBundle] resourcePath]]]] 
     stretchableImageWithLeftCapWidth:27 topCapHeight:9]; 

UIImageView *bottomView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 200+73, 100, 73)]; 
[self.view addSubview:bottomView]; 
UIGraphicsBeginImageContext(CGSizeMake(100, 73)); 
[bottomImage drawInRect:CGRectMake(0, 0, 100, 73)]; 
UIImage *bottomResizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
bottomView.image = bottomResizedImage; 

查看結果:綠條不應該在那裏,它們不會出現在模擬器上。

alt text http://www.quicksnapper.com/files/5161/96232162149F1C14751048_m.png

回答

12

你知道嗎?

似乎它可能是一個UIGraphicsGetImageFromCurrentImageContext的錯誤。如果我繪製具有透明度的圖像,我會看到紅色/綠色的文物。這些只出現在設備上(不在SIM卡中)。另外,如果我從圖像中刪除透明度,那麼工件就會消失。

更新:一些更古怪。我之前使用過PNG,所以我嘗試使用透明GIF代替。使用GIF在SIM上顯示工件問題。

勝利!找到了一個解決方案:

在項目的構建設置中關閉「壓縮PNG文件」。禁用此功能可使PNG透明度無任何工件。

+0

哇,謝謝。 – 2009-12-03 17:24:51

5

好像你寫了很多不必要的代碼,但也許這只是因爲它是斷章取義,還有更多的是我失蹤。

要獲取圖像:

[[UIImage imageName: @"bottom_part.png"] stretchableImageWithLeftCapWidth: 27 topCapHeight: 9]; 

哪一部分代碼的,你顯示此圖像?即你在用什麼方法調用上面的圖像?

爲什麼不使用UIImageView並將圖像放在那裏?那麼你不需要做任何圖像上下文繪圖等。

0

我已經花了5個小時調試了這個昨晚,在xcode中禁用PNG壓縮並沒有爲我做任何事情。

對於其他人在StretchingImageWithLeftCapWidth(在UIImage API中)滿足垂直,綠色,條形/線條/工件 - 這篇文章是給你的。

我有一個21x30的自定義barbutton背景,我想擴大,但得到了與OP相同的綠色條紋。我發現了一個用photoshop創建的PNG,工作正常 - 我的是用Gimp製作的。 無論如何,從文件中剝離所有塊(三個基本塊除外)沒有任何區別。也沒有禁用PNG壓縮。

什麼,我所做的工作是這樣的:

  1. 上方添加我的形象有一個空行(也就是現在的21x31)。
  2. 創建縮放圖像時設置topCapHeight:0。
  3. 當我使用縮放圖像時,我畫了一個CGContext,後來用它來製作UIImage。我使用這個來繪製: [image drawInRect:CGRectMake(0,-2,width,32)];

這使問題消失(對我來說)。

我認爲這個bug /問題與不是在繪圖時垂直縮放,所以我強制縮放第一個源圖像線(分成兩行),這些繪製在我的構圖之外繪製。

我希望這可以幫助別人節省5個小時。

/Krisb

1

在我來說,我有我水平拉伸的UIImageView的。我在拉伸的圖像中發現了一條奇怪的垂直白線。

上述解決方案不適用於我。但是,以下做:

演員寬度值int值:

myNewViewFrame.size.width = (int)newWidth; 
myView.frame = myNewViewFrame; 

希望工程爲你們以及...

+0

感謝Henrik,我只是遇到了完全相同的問題,而且這個問題解決了。 – Echelon 2011-07-25 14:22:59

0

我停下贊成的UIView的大部分使用stretchableImageWithLeftCapWidth更乖的contentStretch屬性。我從來沒有見過你描述的綠色酒吧,但一般來說,我會建議使用contentStretch而不是stretchableImageWithLeftCapWidth。

+0

你如何獲得contentStretch的封裝? – Adam 2010-09-18 16:03:35

0

我試圖禁用像Nate提出的PNG壓縮,但這不適用於我(iOS 3.1.3)。然後我嘗試使用TIFF圖像而不是PNG,該PNG工作正常。

0

使用(0.5,0.5,0,0)的值時,我發現contentStretch類似的問題(在任何繪製內容的UIView上)。即在中心像素上拉伸。

我發現只有iphone 3G(可能是2G)出現這個問題。 iPhone 4和3GS是可以的。所以,我認爲這是舊圖形硬件的問題。

我發現問題的一種方式是在稍大的中心區域上拉伸。

例如(0.4,0.4,0.1,0.1)

+0

請注意,我同意並看到這些問題發生在3g,但不是3g和4 – yeahdixon 2010-11-29 03:24:36