2011-04-23 100 views
4

我有一個UIButton指定寬度爲200.其autoresizingMask屬性設置爲UIViewAutoresizingFlexibleWidth。 A UIImage應用於此按鈕的backgroundImage屬性。此UIimage定義如下:UIButton backgroundImage stretchableImageWithLeftCapWidth:topCapHeight問題

[[UIImage imageNamed:@"buttonimage.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0] 

buttonimage.png具有400像素的寬度(按鈕的2倍的寬度,因爲視網膜分辨率的),代表了圓角矩形。在肖像模式下,一切都很好。只要用戶旋轉設備並且iPhone進入橫向模式,UIButton就會拉伸。由於此行爲,圖像的左側圓角邊框保持不變(stretchableImageWithLeftCapWidth:),但右側邊角也拉伸。是否有我忘記設置的屬性,確保只有一個指定的像素(例如第十個像素)被拉伸,而其他任何像素都保留了它的尺寸?

在此先感謝!

編輯:如果我使用較小的圖像,這已經拉伸到肖像模式,這兩個邊界似乎被擴大。

解決! 如果你的形象被稱爲「myImage.png」,它是視網膜的版本,只是把它稱爲「[email protected]

+1

您應該在非視網膜大小中提供'buttonimage.png',並在視網膜大小中提供第二個版本名字'buttonimage @ 2x.png'。也許這解決了你的問題。 – 2011-04-23 19:41:54

+0

這種行爲在非視網膜和視網膜分辨率支持設備上都會出現。如果我正確理解這一點,那麼[email protected]文件是唯一可以通過視網膜分辨率設備訪問的文件,所以這沒有什麼區別。如我錯了請糾正我。 – fscheidl 2011-04-23 19:46:00

+1

沒錯。我已經嘗試了一個簡單的例子,並且有一個有趣的效果,當我將左帽設置爲像3px這樣的小量時,它會沿着整個按鈕對此部分進行塗抹,其餘部分正確繪製爲與右側對齊。景觀看起來一樣。我的按鈕圖像是50x50,當我將左帽設置爲21px時,它恰好在圓角後面,即使在風景中也看起來很好。也許一些嘗試和錯誤會做? – 2011-04-23 20:02:28

回答

5

有我忘了把 任何財產,以確保只有一個指定的像素 (例如第十個)被拉伸,而其他任何東西都保留了它的尺寸?

不是真的,但考慮到圖像的大小,您應該重新閱讀leftCapWidth屬性。

可伸縮圖像的工作方式是:您提供左帽,下一個像素被拉伸,並且圖像的右側與width = (total width - left cap + 1)保持相同。假設您將左帽設置爲10,並且原始圖片爲400,那麼您告訴iOS右圖中右側不可伸展的右側是400-10-1=389px。垂直同樣適用。檢查是否在普通設備上使用了@ 2x圖像,而其名稱上沒有@ 2x,或者如果2x版本沒有像素的兩倍,或者有大寫/小寫差異。你可以找到這個nslogging的圖像大小加載。

我不知道爲什麼圖像的右側被拉伸。假設你有height=0,如果按鈕高度改變,整個圖像可以垂直拉伸,但這不太可能會導致只有右側失真。

+0

我現在添加了我的按鈕的非視網膜版本,並突然它的工作。你引導我走向正確的道路。 – fscheidl 2011-04-23 20:50:42

2

就我所知,代碼沒有任何問題,應該是導致圖像的右側被裁剪。以下是我使用的確切代碼,我知道這些代碼的作用,以產生您正在尋找的相同效果。

UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 245, 51)]; 
button.autoresizingMask=UIViewAutoresizingFlexibleWidth; 
[button setBackgroundImage:[[UIImage imageNamed:@"userbubble.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:0] forState:UIControlStateNormal]; 
[self.view addSubview:button]; 

我的猜測是問題來自您正在使用的PNG,或者可能來自項目中的壓縮PNG文件設置。此外,由於您使用的圖像非常大,因此請嘗試將左帽進一步放大,比如說40或50像素英寸。

+0

這是我使用的確切代碼。我只是嘗試了一個較小的圖像,奇怪的是,兩個邊界稍微拉伸。 (在橫向和縱向模式下) – fscheidl 2011-04-23 20:22:11

+1

嘗試給自己一個更大的左帽(比如圖像的50%),如果事情看起來很奇怪,請檢查應用程序目標和項目設置下的壓縮PNG文件設置。把它關掉,看看是否有所作爲。 – Sam 2011-04-23 20:30:11

+0

試了兩種選擇。仍然沒有區別。我上傳了我的buttonimage。也許你發現你的userbubble.png和我的圖像有什麼不同。 (笑) – fscheidl 2011-04-23 20:34:48