2016-04-14 4 views
0

私はアプリで常に生きているいくつかのクラスを作成する方法を見つける必要があります。このクラスは、プロジェクトの他のクラスについて何も知らない。画面上ですべてUIViewsを「フォロー」することができるようになります。そのたびに、ビュー全体をチェック(ループ)して、それぞれにポインタを得ることができます。アプリのすべてのビューを取得する

それは(それはメモリの問題です?)ライブ実行し、常にビューの位置を確認するために持っている

なぜポインタ?私はそれについてすべてを知る必要があるので、動くアニメーションやタグなどのメタデータがあると、特定の位置にいくつかのビューがあることを知るだけでは不十分です。

iOSで可能でしょうか?

+0

ライブを実行するとどういう意味ですか?必要なときにいつでもビューツリーにアクセスできるようにしたいのですか、そのツリーの変更(ビューの追加/削除/サイズ変更などの表示)を通知したいと思っていますか? – Vladimir

+0

私はそれらのデータを入手したいだけで、影響を与えずにアクセスできますので、位置、色、タグ、メタデータなどのすべての種類をチェックできます – Curnelious

+0

目的は常にそれらをチェックし、いくつかの "if文"を設定することです。 – Curnelious

答えて

1

全体のアイデアは、反パターンのように聞こえます。ただし、...

興味のあるプロパティごとに、ビューツリーをたどってすべてのビューにKVOハンドラを追加するだけです。ビューが挿入または削除されたときに、通知を受けるために、すべてのビューのsubviews性質を観察する必要がさらに

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

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

そして、観察方法を実装します。

関連する問題