2014-01-11 71 views
0

我創建了一個名爲CTCycleClock的名爲CTCycleSlider的子視圖的自定義UIView。它對一個手勢作出反應,以便它可以在一個軸上旋轉(就像從上面看輪盤表一樣)。在AutoLayout中重置固定寬度和高度

爲了實現這一點,在主視圖CTCycleClock創建對CTCycleSlider子視圖兩個約束其居中於X和Y

實施例:

enter image description here

此外,CTCycleSlider子視圖創建兩個約束本身設置了特定的寬度和高度。這是必要的,否則在旋轉時,磁盤會變大。

這工作很好,正確。但是當超視圖的尺寸更大時(比如在iPad上),我不知道如何告訴AutoLayout子視圖有一個新的固定寬度和高度等於超視圖。

這是我在上海華設置約束:

NSLayoutConstraint *centerX = [NSLayoutConstraint 
           constraintWithItem:subview 
           attribute:NSLayoutAttributeCenterX 
           relatedBy:NSLayoutRelationEqual 
           toItem:self 
           attribute:NSLayoutAttributeCenterX 
           multiplier:1.f constant:0.f]; 
NSLayoutConstraint *centerY = [NSLayoutConstraint 
           constraintWithItem:subview 
           attribute:NSLayoutAttributeCenterY 
           relatedBy:NSLayoutRelationEqual 
           toItem:self 
           attribute:NSLayoutAttributeCenterY 
           multiplier:1.f constant:0.f]; 

[self addConstraint:centerX]; 
[self addConstraint:centerY]; 

這是如何設置的約束的子視圖,其中self.widthAndHeight目前硬編碼到320上iPhone和450上ipad公司:

NSLayoutConstraint *w = [NSLayoutConstraint 
         constraintWithItem:self 
         attribute:NSLayoutAttributeWidth 
         relatedBy:NSLayoutRelationEqual 
         toItem:nil 
         attribute:NSLayoutAttributeWidth 
         multiplier:1.0f 
         constant:self.widthAndHeight]; 
NSLayoutConstraint *h = [NSLayoutConstraint 
         constraintWithItem:self 
         attribute:NSLayoutAttributeHeight 
         relatedBy:NSLayoutRelationEqual 
         toItem:nil 
         attribute:NSLayoutAttributeWidth 
         multiplier:1.0f 
         constant:self.widthAndHeight]; 

[self addConstraint:w]; 
[self addConstraint:h]; 

所以我的問題是:我怎樣才能讓一個子視圖擁有一定的餘量先擁抱超級視圖框架,但也設置其寬度和高度固定?

編輯:一些澄清,爲什麼我需要約束,設置寬度/高度固定。

當我將不設置寬度/高度固定,用戶觸摸旋轉輪盤,你會得到以下結果:

wheel rotated but is made smaller because of missing width/height constraints

在上圖中,我給自己定將top/lead/width/height設置爲superview的子視圖的約束條件。當用戶還沒有旋轉車輪子視圖時,這很好用,但是當他們這樣做時,自動佈局約束迫使矩形UIView更小,因此它完全適合超級視圖。

因此,問題仍然存在:如何創建約束條件,最初將子視圖的大小正確調整到超級視圖,但隨後在旋轉時設置固定的寬度/高度,它保持相同的大小?

回答

0

...我怎樣才能讓一個子視圖第一擁抱了 一定幅度的上海華框架外,還設置其寬度和高度固定的嗎?

我不明白你的問題。如果您使圖像視圖擁有固定邊距(所有邊)的超視圖,則圖像視圖的大小由超視圖決定。

您可以將圖像視圖固定在兩側(例如頂部和左側)並指定尺寸。然後到另外兩邊的距離會根據監視的大小而變化。或者你可以把它放在超級視圖中並修改大小,然後所有的邊距都會根據超級視圖的大小而變化。

+0

增加了一些說明。我把它集中在超級視圖中。我不想修復這個大小,它應該依賴於superview。但似乎我被迫,因爲否則它會調整輪換。順便說一句,它不是一個圖像,而是一個自定義繪製的視圖(即它覆蓋了drawRect)。 –

+0

因此,將自定義視圖的高度和寬度設置爲與超級視圖相同的大小。 –

+0

我該怎麼做?我不知道做這件事的正確地點。問題是我需要在layoutSubviews被調用之前設置這些固定寬度/高度約束,但是在那個階段,superview的寬度/高度還不知道(因爲layoutSubviews先在子視圖上調用,然後在superviews,據我所知)。 –

相關問題