2016-04-14 24 views
0

我需要找到一種方法來創建一些在應用程序中始終存在的類。此類對項目中的其他類沒有任何瞭解。它將能夠在屏幕上「跟隨」所有UIViews-所以每一次我都可以檢查(循環)視圖並獲得指向每個視圖的指針。獲取應用程序的所有視圖 - 每一個時刻?

它具有實時運行,並經常檢查的意見位置(是內存的問題?)

爲什麼指針?因爲我需要知道它的一切,所以如果它的某種移動動畫,或者它可能具有某些元數據(如標籤等),所以只知道某個位置有某種視圖是不夠的。

有沒有可能在iOS

+0

你是什麼意思跑跑?你想在任何時候想要訪問視圖樹,或者你想獲得有關該樹的任何更改的通知(查看添加/刪除/調整大小等)? – Vladimir

+0

我想只在需要時獲取關於它們的數據,根本不會影響它們,只需訪問它們,以便檢查各種東西,如位置,顏色,標籤,元數據等。 – Curnelious

+0

真實目的是一直檢查它們,併爲某些事情設置一些「if語句」 – Curnelious

回答

1

整個想法聽起來像一個反模式。但是,...

簡單地遍歷視圖樹,併爲每個有趣的屬性添加一個KVO處理程序到每個視圖。

- (void)traverseSubviewsOfParentView:(UIView*)view 
    for(UIView* subview in view.subviews) 
    { 
    [view addObserver:self forKeyPath:@"frame" options: NSKeyValueObservingOptionNew]; 
    … 
    [self traverseSubviewsOfParentView:subview context:NULL]; 
    } 

然後實現觀測方法:

-(void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context 
{ 
    if([@"frame" isEqualToString:keyPath]) 
    { 
    // Do what you want to do 
    } 
    … 
} 

另外,你要觀察每個視圖的subviews屬性得到通知,當一個視圖插入或刪除。

相關問題