2013-10-21 17 views
5

Ich habe eine Containeransicht erstellt, die eine Reihe von Kindansichten enthält - eine Sammlungsansicht, eine benutzerdefinierte Symbolleiste und einige Kleinigkeiten.DrawRect über Unteransichten?

Das Design hat eine Grenze auf der oberen, linken und rechten Seite, aber nicht auf der Unterseite, also überschreibe ich DrawRect, um Rand zu enthalten.

Als ich die Symbolleiste hinzugefügt habe, habe ich bemerkt, dass sie über dem Rand des Rahmens erscheint. (Aus irgendeinem Grund dachte ich zuerst, dass es nicht würde, aber natürlich tut es das!).

Gibt es trotzdem kann ich DrawRect sagen, um über meine Subviews zu zeichnen?

Natürlich gibt es viele andere Möglichkeiten, um mein Problem zu lösen (stellen Sie den Rahmen in der Symbolleiste zum Beispiel) aber ich diese Frage, um ein tiefes Verständnis dafür, wie Zeichnung Arbeiten in Bezug auf Compositing und die Ansicht zu erhalten Hierarchie.

+0

Verwenden Sie 'zIndex' – onmyway133

Antwort

5

Das Zeichnen geschieht unter allen Unteransichten einer UIView. Stellen Sie sich vor, dass es sich um die Basis handelt - ein tatsächlicher Teil Ihrer Sichtweise - und dann wird jede Unteransicht auf Ihrer Ansicht hinzugefügt. Die Zeichnung über den Unteransichten ist so, als würden die Unteransichten unter der Ansicht erscheinen, während sie noch Unteransichten sind. Vielleicht macht diese Analogie klar, warum sie immer unten sein muss. Und es führt Sie auch logisch zur Lösung:

Um die Zeichnung über Unteransichten zu erhalten, erstellen Sie einfach eine neue UIView-Unterklasse, um den Zeichnungscode darin zu platzieren, und platzieren Sie diese über allen anderen Unteransichten.

Es könnte auch eine gute Idee sein, die UIView-Implementierung addSubview: zu überschreiben, um sicherzustellen, dass Ihre Unteransicht immer oben bleibt.

+0

Danke. Verrückte Frage im Nachhinein. Natürlich muss die Zeichnung der Ansichtshierarchie folgen. Was könnte es noch tun? –

2

Ich glaube, Sie können nicht, da das DrawRect zuerst für die Ansicht aufgerufen wird und wenn es fertig gezeichnet wird, wird drawRect für Subviews aufgerufen, um darüber zu zeichnen. Vielleicht machen Sie einfach eine weitere Unteransicht, die die Grenzen hat, die Sie brauchen, und ist überall transparent?

2

Unteransichten sind drawn on top of their super views. Also ist die Antwort auf Ihre Frage nein.

Wenn Sie den Rahmen an der Containeransicht zeichnen, hat Cocoa noch nicht einmal mit dem Zeichnen der Symbolleiste begonnen.

Ich denke, Sie könnten den oberen Rand eine Unteransicht machen oder die Symbolleiste ein wenig nach unten bewegen.

Verwandte Themen