Ich implementiere ein einfaches iOS-Solitaire-Spiel, das es dem Benutzer erlaubt, die Karten auf die übliche Weise herumzuziehen. Die Karten werden mit der UIView
Unterklasse CardView
dargestellt. Alle Kartenansichten sind Geschwister, die Unteransichten von SolitaireView
sind. Der folgende Ausschnitt versucht, „eine Karte an die Front zu bringen“, so dass es vor allem der anderen Ansichten ist, wie es gezogen wird:UIView bringSubviewToFront: bringt * keine * Sicht nach vorne
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view.tag == CARD_TAG) {
CardView *cardView = (CardView*) touch.view;
...
[self bringSubviewToFront:cardView];
...
}
}
Leider bleibt die Karte der Z-Reihenfolge während des Drag unverändert. In den Bildern unten ziehe ich den König. Beachten Sie, wie es richtig oben ist die Neun im linken Bild, ist aber falsch unter den Zwei (unter dem gesamten Stapel tatsächlich) im rechten Bild:
Ich habe auch versucht, verändern die layer.zPosition
Eigenschaft als gut vergebens. Wie kann ich die Kartenansicht beim Ziehen nach vorne bringen? Ich bin verwirrt.
Ich entdeckte, dass 'bringSubviewToFront:' die ‚needsLayout‘ Flag Ansicht Trigger festgelegt werden. Meine 'layoutSubviews' Methode rief auch' bringSubviewToFront: 'auf und löschte so alle View z-Befehle in ihren ursprünglichen Zustand zurück! – wcochran
Dann ist die Lösung dafür? Ich habe auch die gleiche Art von Anforderungen, wo aus der Liste der Karten, wenn ich irgendeine der mittleren Ordnung Karte auswählen, sollte es kommen, dann nach vorne kommen. aber meine Animation funktioniert nicht wegen bringSubviewToFront: Methode – Mrunal
Wenn Sie bei der Verwendung von UIView-Unterklassen bleiben, dann müssen Sie die gezogene Karte markieren, damit layoutSubviews sie oben platzieren kann. Ich habe tatsächlich auf CALayers wie unten erwähnt umgeschaltet. – wcochran