[英]Value of type '(CGFloat, CGFloat) -> CGRect' has no member 'origin'
[英]Automatically update CGRect based on changing value of CGFloat
我的視圖控制器中有一個變量CGFloat x
。 我用這個變量創建了一個框架:
CGRectMake(x,x,4*x,4*x)
當x
被改變時,我希望frame的值也可以在沒有任何手動更新的情況下改變。 我怎樣才能做到這一點?
沒有辦法'深度復制' CGFloat
,因為CGFloat
是一種原始類型 ,而不是一個對象。 另外, CGRect
是一個struct
,而不是一個對象,因此它由一個接一個存儲的4個CGFloat
組成。 不是對CGFloat
的引用,而是原始值本身。
但是,如果將x
聲明為視圖控制器的屬性:
@property CGFloat x;
然后你可以覆蓋x
的setter來更新你的框架的值:
- (void)setX:(CGFloat)x {
_x = x;
self.myFrame = CGRectMake(x, x, x * 4, x * 4);
}
這樣,每次使用self.x = whatever
更改x
,都會調用setter方法並更新幀。
這基本上是最安全和最可靠的方法,只要你記得只通過self.x = whatever
設置x
,如果你直接設置底層的ivar _x
,就不會調用setter而且frame不會更新。
你不能制作不可變數據的副本。所以你不能復制CGFloat.But如果你想在這種情況下改變你的框架,你需要在X屬性的setter方法中設置你的框架。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.