2016-04-14 32 views
0

Uygulamada her zaman canlı olan bir sınıf oluşturmanın bir yolunu bulmalıyım. Bu sınıf projesinde diğer sınıflar hakkında hiçbir şey bilmiyor. Tüm UIViews ekranını "takip edebilir" böylece her an görünümler üzerinde (döngü) kontrol edebilir ve her birine bir işaretçi alabilirim.Bir uygulamanın tüm görünümlerini-her anı alın?

Bu görüş pozisyonları kontrol daima canlı çalıştırın ve gereken

(oluyor da bir bellek sorunu?)

Neden işaretçi? çünkü onun hakkında herşeyi bilmem gerekiyor, bu yüzden eğer bir tür hareketli animasyon, ya da belki de etiketler, vb. gibi bazı meta verilere sahipse, sadece belirli bir pozisyonda bazı görüşlerin olduğunu bilmek yeterli değildir.

o iOS yılında mümkün mü?

+0

Canlı yayın yaparak ne demek istiyorsun? Görünüm ağacına istediğiniz zaman erişmek veya o ağaçtaki herhangi bir değişiklikten haberdar olmak istiyorsanız (eklenen/kaldırılan/yeniden boyutlandırılan vb.) Görmek istiyor musunuz? – Vladimir

+0

Sadece onlarla erişmek, onları hiç etkilemeyen, istediğim zaman hiç yalnız bunlarla ilgili verileri almak istiyorum, bu yüzden vb pozisyon, renk, etiket, meta veriler, – Curnelious

+0

gerçek gibi şeyler her tür kontrol edebilirsiniz orada – Curnelious

cevap

1

fikrine bir antipattern benziyor. Ancak ...

Basitçe görünümü ağaç travers ve her ilginç özellik için her görüşe bir KVO işleyici ekleyin.

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

Sonra gözlem yöntemini uygulamak:

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

Ayrıca bir görünüm takarken veya çıkarırken zaman, bildirim almak için her bakış subviews özelliğini gözlemlemek gerekiyor.