2013-05-30 67 views
0

我想跟蹤我的UIView's(和UIViews的子類),在這種情況下,他們的幀。我想保留一個pterter,用NSDictionary表示我的每個子視圖與他們的相關框架。識別UIViews持有信息

我實現了這樣的東西;

NSMutableDictionary *subviewRects = [[NSMutableDictionary alloc] init]; 

    // iterate through all subviews ans save their CGRects 
    for (UIView *subview in self.holder.subviews) { 
     NSValue *rectValue = [NSValue valueWithCGRect:subview.frame]; 
     [subviewRects setObject:rectValue forKey:[NSString stringWithFormat:@"%d",subview.hash]]; 
    } 

但我不知道這是否是實現這一目標的正確方法,或者更重要的是,將相關UIViewController生命週期中UIView變化hash財產?

注意:我忘了說我不能在這種情況下使用tagUIView的財產。

+2

您可以使用視圖的標籤屬性來識別視圖,但是如果您有很多視圖和複雜的視圖層次結構,我認爲這很難完成。僅僅因爲好奇,你爲什麼要嘗試這樣做? – danypata

+0

我有一個設計,當旋轉發生時,autosizing不能安排我的子視圖。我會強制輸入我的cgrects,所以我試圖儘可能地降低我的員工數量,是的,我補充說我不能使用標籤來註釋:) – Bartu

回答

1

我知道的大部分UIView的繼承者都有一個靜態哈希值。但是,要小心:這不能保證是真實的,因爲子類可以覆蓋散列。

相反,最好通過一個簡單的命名方案跟蹤你的視圖,或者簡單地使用對象指針來保存引用(用%p代替%@來獲取對象的指針而不是描述)。

另外:請注意,您正在使用控制器視圖對象的散列值來存儲子視圖的每個矩形。你確定你不打算使用每個子視圖的哈希值嗎?

+0

存儲指針是我想要的第一位!我怎樣才能得到一個NSObject的指針,你可以顯示一個簡單的代碼?是的,我只是準備了代碼來問我的問題,修正了這一部分,好的趕上:) – Bartu

+1

@Bartu你的子視圖實例是一個指針:[subviewRects setObject:rectValue forKey:[NSValue valueWithPointer:subview]];但爲什麼不簡單地使用你的子視圖作爲關鍵? [subviewRects setObject:rectValue forKey:subview]; – Emmanuel

+0

感謝您的加入:) – Bartu