2012-02-22 91 views
1

我需要一些幫助來理解在UIView上使用contentStretch屬性。我會很感激1)關於如何達到我要去的效果的一些指導和2)關於如何使用這個屬性的任何全面文檔的參考。雖然我以爲我瞭解蘋果的文檔,但我現在看到我沒有。這是我想要做的。使用contentStretch拉伸UIView的一部分

我有一個自定義的UIView呈現一個看起來像圖一樣的視圖。下面。這個UIView的drawRect方法使用不同的顏色和效果來繪製左邊的內部框(帶有圓角和白色背景),並且影響其餘部分的視圖。此外,UIView的四個角不可拉伸(這將導致失真),所以我只需要拉伸UIView背景的中心。

我想將這個視圖增長成與圖b所示相似的形狀。下面。這樣做時,我只需要將白色框外部的視圖部分(或白色框右側)拉伸/重複,以增加UIView的高度。

sketch1

在我所有的嘗試我只能夠產生影響類似於圖C視圖中的視圖和結果的整個寬度的strecth。

sketch2

是否有可能對我來說,使用contentStretch達到我想要的效果(圖B)?是否還有其他一些技術我應該用於重新繪製整個視圖,或者重新繪製唯一的(或最佳)方法來解決這個問題?

感謝,

回答

1

要實現這一點與contentStretch,你就必須設置contentStretch矩形,這樣其邊緣低於白框的底部邊緣,所以其的邊緣是右邊的白色方塊的右邊緣。你可能會發現你的背景圖案太多,看起來很醜。

相反,給你的看法一個只畫白盒的子視圖。設置子視圖的彈簧和支柱,使箱子保持在左上角,不會拉伸。

+0

上面的數字有點誤導。它們只是我實際視圖的簡化線框(用於說明目的)。在我的實際視圖中,白色框是一個透明的(alpha = 0)窗口,所以我不知道如何使它成爲子視圖,並且它仍然像背景上的窗口一樣。至於將contentStretch矩形設置在白色方塊的下方和右側(這是我擔心我將不得不嘗試的),我沒有足夠的空間來做到這一點,因爲白色方塊下方的區域處於不可拉伸的區域(拉伸會導致背景變形)。 – kodie 2012-02-22 05:06:03

+0

在這種情況下,只需使用'UIViewContentModeRedraw'並在'drawRect:'中繪製所需的內容即可。 – 2012-02-22 05:40:57

+0

這就是我所擔心的,但也是我的預期。謝謝, – kodie 2012-02-22 17:43:18

0

我會做白盒頂部伸展,並用colorWithPatternImage填充圖案的背景視圖:

patternView.backgroundColor = [UIColor colorWithPatternImage:@"myBackgroundPattern.png"]; 

和黑色筆觸可以用做:

#include <QuartzCore/QuartzCore.h> 
... 
patternView.layer.borderWidth = 2.f; 
patternView.layer.borderColor = [[UIColor blackColor] CGColor]; 
0

什麼你正在嘗試使用UIImage的resizableImageWithCapInsets方法來完成。這樣,您可以在圖像的每一側設置封面寬度,並指定圖像的哪一部分需要重複(不拉伸)。

一種UIEdgeInset是由如下四個分量(CGFloat的topCapWith,CGFloat的leftCapWith,CGFloat的bottomCapWith,CGFloat的rightCapWith)

代碼

UIImage * backgroundImage = [[UIImage imageNamed:@"Stretch.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(80, 4, 4, 10)]; 
    backgroundImageView.image = backgroundImage; 
0

由於內容拉伸低於會做的伎倆的一個結構不推薦使用,最好的方法是使用自動佈局。在內部矩形中給出一個定義的高度和寬度常數,並將其頂部和主要約束綁定到父視圖。 爲了在外部矩形中獲得底部生長,綁定它的底部約束,或者您也可以調整它的高度。