簡體   English   中英

根據CGFloat值的變化自動更新CGRect

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM