我的視圖控制器中有一個變量CGFloat x
。我創建與此變量的幀:根據改變CGFloat的值自動更新CGRect
CGRectMake(x,x,4*x,4*x)
當x
改變時,我想幀的值也改變無需任何手動更新。 我該怎麼做?
我的視圖控制器中有一個變量CGFloat x
。我創建與此變量的幀:根據改變CGFloat的值自動更新CGRect
CGRectMake(x,x,4*x,4*x)
當x
改變時,我想幀的值也改變無需任何手動更新。 我該怎麼做?
沒有方法爲「深拷貝」一個CGFloat
,由於CGFloat
爲原始類型,而不是一個對象。此外,CGRect
是一個struct
,不是一個對象,所以它由一個接一個地存儲的4個CGFloat
組成。未提及CGFloat
s,但原始值本身。
但是,如果聲明x
爲您的視圖控制器的屬性:
@property CGFloat x;
然後你就可以覆蓋的x
二傳手更新您的框的值:
- (void)setX:(CGFloat)x {
_x = x;
self.myFrame = CGRectMake(x, x, x * 4, x * 4);
}
在這方式,每次你改變x
使用self.x = whatever
,setter方法將被調用,你的框架將被更新。
這基本上是做到這一點的最安全,最可靠的方法,只要你記得只設置x
通過self.x = whatever
,如果直接設置底層伊娃_x
,二傳手不會被調用,框架不會更新。
你不能製作不可變數據的副本。所以你不能複製CGFloat.But如果你想在這種情況下改變你的框架,你需要在X屬性的setter方法中設置你的框架。
CGFloat不可變(它甚至不是真正的對象,因爲它分解爲基本類型)。沒有必要對其進行「深層複製」。這個問題可能是這樣的:「我怎樣才能使CGRect動態改變(基於變量)?」 – user2246674