2016-10-14 5 views
0

Ich habe eine Bildlaufansicht mit mehreren Elementen (Beschriftung, Schaltfläche ...), ich muss ein Bild anzeigen, wenn während des Scrollens eine Schaltfläche auf dem Bildschirm erscheint.Objekt auf dem Bildschirm erkennen

Ich kann erkennen, wenn Taste wie diese auf dem Bildschirm erscheint:

func scrollViewDidScroll(scrollView: UIScrollView) { 
let offset = self.scrollView.contentOffset 
let onScreen = CGRectOffset(self.scrollView.frame, offset.x, offset.y) 
if CGRectIntersectsRect(onScreen, self.button.frame) { 
    ... 
} 

}

Aber ich will alle Tasten bekommen (vielleicht in Array mit Tags), die nach dem Scrollen auf dem Bildschirm angezeigt.

Wie kann ich das tun?

+0

Was Sie tun, wird funktionieren, also, was ist das Problem? Sie können ein Array mit allen Ansichten erstellen, wenn Sie möchten, genau wie Sie gesagt haben. – Dima

+0

Ich füge alle Schaltfläche in Code von http Anfrage. Und ich setze jede Knopfmarke mit irgendeiner Identifikation. Dies ist ID = ID-Bild. Wenn Sie alle Tasten durchgehen, wenn Sie aufhören zu scrollen, wird es sehr lang sein. – Dim

+0

Eine mögliche Optimierung besteht darin, alle Schaltflächen zu einem Array hinzuzufügen, auf das Sie direkt zugreifen können, anstatt nach Tags suchen zu müssen. Sie können die Sichtbarkeit auch etwas schneller überprüfen, indem Sie nur den Rahmenursprung der Schaltflächen mit dem Inhaltsversatz der Bildlaufansicht vergleichen, da Sie sich nicht wirklich um die gesamte Schnittmenge kümmern. Darüber hinaus haben Sie nicht genügend Informationen angegeben, um weitere nützliche Optimierungen vornehmen zu können. – Dima

Antwort

0

Wenn sich alle Schaltflächen in einem Array befinden, verwenden Sie ein NSSet, und verwenden Sie für die Bildlaufschaltflächen ein NSMutableSet.

So kurz vor Scrollen Sie wie folgt vor:

NSMutableSet *scrolledButtons = [[NSMutableSet alloc] init]; 

Und sie bewegen, fügen Sie sie:

[scrolledButtons addObject:aButton]; 

Dann, wenn Sie fertig, machen Sie einfach einen Scheck:

NSSet *allMyButtons = [NSSet setWithArray:self.myArrayOfButtons]; 
if ([allMyButtons equalToSet:scrolledButtons]) { 
    // whatever 
} 

Und Entschuldigung dafür, es in Obj-C zu tun ... mein Swift ist nicht ganz auf Schnupftabak und ich mache das schnell.

+0

Nein, nein, nein. Ich möchte alle Objekte (unbutton, uilabel) erhalten, die nach dem Scrollen auf dem Bildschirm erscheinen. – Dim

Verwandte Themen