2017-06-06 4 views
0

Ich versuche einen Animationsübergang zu verwenden, wenn ein UIView auf dem Bildschirm angezeigt wird. Die UIView wird korrekt angezeigt, die Animation wird jedoch nicht angezeigt, wenn sie angezeigt wird.UIView Transitionsanimation wird nicht ausgeführt

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    let coreView = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 
    coreView.backgroundColor = UIColor.cyan 
    coreView.layer.borderColor = UIColor.darkGray.cgColor 
    coreView.layer.borderWidth = 8 
    coreView.layer.cornerRadius = 15 
    coreView.isHidden = true 
    self.view.addSubview(coreView) 

    //The transition occurs here 
    UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: { 

     coreView.isHidden = false 
    }, completion: {_ in}) 

    } 

Antwort

0

Dies funktioniert nicht, da coreView erst nach Abschluss der viewWillAppear-Methode ordnungsgemäß eingerichtet wird, sodass Sie die Übergangsanimation nicht verwenden können (Sie können andere Eigenschaften wie das Alpha animieren).

Was können Sie tun, ist dies:

DispatchQueue.main.async { 
    coreView.isHidden = false 

    UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: { 
    }, completion: {_ in}) 

} 

Dieser löst den Übergang zurück auf die Hauptwarteschlange und es feuert nach dem viewWillAppear Verfahren abgeschlossen haben und die Coreview richtig eingestellt ist.

Übrigens, dass viewWillAppear immer dann aufgerufen wird, wenn der View-Controller angezeigt wird. Wenn er versteckt und zurückkehrt, fügen Sie ein weiteres coreView hinzu.

+0

Das war es! Es funktioniert jetzt :) – SwiftyJD

0

Try self.view.layoutIfNeeded() nach dem coreView Versteck Code im Block Animation hinzufügen.

1

Statt isHidden Eigenschaft des Coreview verwenden, um die alpha Eigenschaft der Manipulation.

coreView.isHidden = true mit coreView.alpha = 0 und im Animationsblock ersetzen Versuchen Sie ersetzen coreView.isHidden = false mit coreView.alpha = 1

Das sollte es sein Ich vermute. Es sollte animieren. Vielen Dank.

+0

In der Regel sind nicht alle Eigenschaften * animierbar *. Wenn eine Eigenschaft von UIView animierbar ist, wird sie immer explizit in der Dokumentation erwähnt. 'isHidden' ist nicht animierbar. – deadbeef

+0

Es handelt sich um eine Übergangsanimation, die beim Hinzufügen oder Abrufen einer Hierarchieansicht verwendet wird. Wenn die Ansicht im Storyboard hinzugefügt wird, funktioniert sie, aber da diese Ansicht programmgesteuert erstellt wurde, funktioniert sie nicht – SwiftyJD