Ändern der z-Reihenfolge der subviews auf dem iPhone
Bin ich, ein Spiel zu entwickeln. Ich bin mit über 150 UIImageView zu halten die Grafik. Ich bin eine simulierte 3D-Umgebung, also würde ich das gerne ändern der z-Reihenfolge (wie nah ein Objekt an der Kamera).
Ich weiß, dass es existiert :
[superWindow exchangeSubviewAtIndex:ich withSubviewAtIndex:j];
Aber aus irgendeinem Grund funktioniert es nicht, einige der Untersichten verschwinden einer re-angezeigt werden.
Jetzt muss ich nur entfernen Sie alle Untersichten und fügen Sie es wieder in der richtigen Reihenfolge, das ist ok mit 50 Untersichten (auf einem iphone 2G), aber mit 120 dauert es eine halbe Sekunde, so dass das gameplay saugt (ich habe nicht und 3GS also ich nicht versuchen Sie es).
Ich bin mit so vielen Untersichten, da jeweils ein Quadrat, dann habe ich es gefärbt, vergrößern, verkleinern und verschieben Sie Sie irgendwo auf dem Bildschirm. Ich halte die Untersichten unter einem NSMutableArray...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem iPhone Dokumentation oft warnt über mehrere UIViews verschachtelt, da es einen großen performance-Treffer nach einem bestimmten Punkt. Wenn Sie beginnen immer in Probleme, die eine option zum Rendern Ihrer UIViews in ein Bild und verwenden, die zu senken die Zahl der on-screen-Ansichten, aber wenn Sie die Simulation in 3D, dass wahrscheinlich nicht viel helfen, da Sie Ihre composite-Ansicht müsste re-rendering zu oft.
Das iPhone hat volle Unterstützung für OpenGL ES, das es ermöglicht, eine real 3D-Umgebung. Nehmen Sie einen Blick an einigen der Proben und/oder ein gutes Buch zu dem Thema und du wirst feststellen, dass es viel einfacher ist, einfach die OpenGL verwenden.
Z-order ist ein Artefakt, wo Ihre anzeigen erscheint in Ihrem superview Liste der Unteransichten. Die letzten Untersicht Hinzugefügt, um die superview ist "on top".
So verschieben Sie eine Ansicht, um die "on top", entfernen Sie es aus Ihrer superview, dann wieder neu hinzufügen-so dass es die Letzte und damit an der Spitze.
Hier, eine Ansicht, bewegt sich die Spitze der z-Reihenfolge.
Hinweis die [self retain], um zu verhindern, dass Ihre dealloc wenn Ihr superview ist die einzige Bezugnahme auf Sie.
Wenn Sie nicht wollen, um den Sprung zu OpenGL ES, wie Timothy schon sagt, vielleicht möchten Sie sich mit dem ersetzen von UIViews mit CALayers und platzieren Sie diese innerhalb einer CATransformLayer. CATransformLayer ist neu in iPhone OS 3.0 und ermöglicht es Ihnen, eine echte 3-D-layout der CALayers. Sie können dann die zPosition Grundstück, auf Ihre CALayers suchen Sie in der Z-Ebene der CATransformLayer. Für mehr auf 3-D-layout der CALayers, ich richte Sie dieser Artikel.
Können Sie auch hinzufügen, eine schöne Perspektive Auswirkungen auf die gesamte CATransformLayer von Einstellung der m34-element in der CATransform3D auf diese Ebene angewendet werden.
Wechsel von UIViews zu CALayers ist ziemlich einfach, denn Ihre Strukturen haben vieles gemeinsam.
Verwenden Sie ein 2D-Spiel Bibliothek, wie Cocos2D. Ich bin mir ziemlich sicher, dass unterstützt Z-Reihenfolge, und die Leistung ist erheblich besser als mit UIViews.
Ich weiß, das ist alt, aber Sie können ändern Sie die z-Reihenfolge mit bringSubViewToFront.
Siehe diese Antwort: Festlegen von iPhone-UI-Ansicht z-index?