Bei Rotataion Ausführung layoutSubviews verschieben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bei Rotataion Ausführung layoutSubviews verschieben

    Hi,

    ich habe einen View, der 12 Subviews hat. Wenn ich das Device drehe, werden der Main-View und die Subviews gedreht. Nun sieht das Drehen der Subviews ziemlich dusselig aus, weill sich alle einzeln um ihr center drehen und (weil sich die Verteilung ändert) dazu auch noch ihre Position verändern. Der Knackpunkt ist, dass layoutSubviews, in dem die Position der Subviews verändert wird, "zu früh" aufgerufen wird und die Umsortierung voll in die Rotations-Animation des Mainview rutscht.

    Gibt es eine Möglichkeit, die layoutSubviews-Methode erst später, z.B. erst in der zweiten Animationshälfte, aufzurufen?

    Danke!
    Frank

    EDIT: Genauer: Ich würde das gern in den "completion"-Block einer UIView-Animation innerhalb willAnimateRotationToInterfaceOrientation:duration: verlegen.
  • Nein, denn layoutSubviews brauche ich auch im regulären Betrieb. Nur im Fall der Rotation soll sie halt (etwas) später aufgerufen werden.

    Lösbar wäre das über einen Marker, in dem ich checke, ob es sich um einen Rotationsprozess handelt, in dem die Methode aufgerufen wird. Nur ist das nicht wirklich elegant, finde ich.
  • Die Methode layoutSubviews ruft Cocoa Touch auf und Apple rät davon ab, das selber zu machen. Stattdessen solltest Du layoutIfNeeded oder setNeedsLayout verwenden.

    Du kannst jedoch layoutSubviews überschreiben und darin nur dann die Super-Methode aufrufen, wenn Du es brauchst. Das macht allerdings nur bei Autolayout Sinn. Bei Autosizing führt Cocoa Touch keine internen Layout-Operationen über layoutSubviews durch.
    „Meine Komplikation hatte eine Komplikation.“