UIView.animateWithDuration Pas de l'Animation de Swift (encore une fois)

Remarque: j'ai déjà vérifié la pile suivante problèmes de débordement:

Vingt sept million neuf cent sept mille cinq cent soixante dix, Trente deux million deux cent vingt neuf mille deux cent cinquante deux, Vingt six million cents dix huit mille cents quarante et un, Trente et une million six cent quatre mille trois cent

Tout ce que je suis en train de faire est fondu animer dans une vue (en alpha) lorsqu'il est appelé par une IBAction attaché à un bouton. Puis en sens inverse lorsqu'un bouton sur le point de vue est frappé.

Ma rides peut être que je suis à l'aide d'un secondaire de vue sur la ViewDock dans la Vue storyboard. La vue est ajouté à la sous-vue au moment de la viewDidLoad où l'image/limites sont fixées de la même façon que le superview (pour un plein escale)

La raison de ce qui est fait comme une superposition, étant donné qu'il s'agit d'un tutoriel indicateur.

Le résultat (comme beaucoup d'autres qui ont listé ce problème), la vue (et les contrôles contenus), il suffit de s'affiche instantanément et disparaît instantanément. Pas fondu.

J'ai essayé animationWithDuration avec retard, avec et sans l'achèvement, à la transition, et même commencé avec le vieux UIView.beginAnimations.

Rien ne fonctionne. Suggestions chaleureusement accueillis.

Le code est à peu près aussi simple que je peux le faire:
Edit: Élargi le code pour tout ce qui est pertinent
Edit2: TL;DR Tout fonctionne à l'exception de UIViewAnimateWithDuration qui semble ignorer le bloc et la durée et il suffit d'exécuter le code en ligne immédiate de l'INTERFACE utilisateur de changer. La résolution de cette devient le bounty

@IBOutlet var infoDetailView: UIView! //Connected to the view in the SceneDock

override func viewDidLoad() {
    super.viewDidLoad()

    //Cut other vDL code that isn't relevant

    setupInfoView()
}

func setupInfoView() {
    infoDetailView.alpha = 0.0
    view.addSubview(infoDetailView)
    updateInfoViewRect(infoDetailView.superview!.bounds.size)
}

func updateInfoViewRect(size:CGSize) {
    let viewRect = CGRect(origin: CGPointZero, size: size)

    infoDetailView.frame = viewRect
    infoDetailView.bounds = viewRect

    infoDetailView.layoutIfNeeded()
    infoDetailView.setNeedsDisplay()
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    updateInfoViewRect(size)
}

func hideInfoView() {
    AFLog.enter(thisClass)
    UIView.animateWithDuration(
        2.0,
        animations:
        {
            self.infoDetailView.alpha = 0.0
        },
        completion:
        { (finished) in
            return true
        }
    )
    AFLog.exit(thisClass)
}

func showInfoView() {
    AFLog.enter(thisClass)
    UIView.animateWithDuration(
        2.0,
        animations:
        {
            self.infoDetailView.alpha = 0.75
        },
        completion:
        { (finished) in
            return true
        }
    )
    AFLog.exit(thisClass)
}

//MARK: - IBActions

@IBAction func openInfoView(sender: UIButton) {
    showInfoView()
}

@IBAction func closeInfoView(sender: UIButton) {
    hideInfoView()
}

Veuillez noter, j'ai commencé par celui-ci:

func showInfoView() {
    UIView.animateWithDuration(2.0, animations: { () -> Void in
        self.infoDetailView.alpha = 0.75
    })
}

func hideInfoView() {
    UIView.animateWithDuration(2.0, animations: { () -> Void in
        self.infoDetailView.alpha = 0.00
    })
}
"La vue est ajouté à la sous-vue au moment de la viewDidLoad" <- nous allons voir le code.
FWIW, vous pouvez passer " nil " que l'achèvement de blocs d'ici. Même si vous avez des blocs, ils ont certainement ne devrait pas être de retour quoi que ce soit. Je suis surpris de la Swift compilateur n'a pas de drapeau que comme une erreur.
J'ai ajouté tous les code ci-dessus. J'avais essayé avec et sans le retour comme indiqué dans l'original pré-tweaked à défaut de code.
Enfin. La vue s'affiche et configure les paramètres de l'amende juste. Tout est là où il est censé être. Tous les éléments d'INTERFACE de travail, et la rotation ajuste le contenu par des contraintes. Le SEUL problème, c'est que l'alpha changement ne se produit pas comme un effet de fondu. Tout simplement un instant apparaître.
Votre code est correct. J'ai vu inattendue de l'INTERFACE utilisateur comportement comme ça quand il y a des problèmes de threading ailleurs dans l'application. Essayez de placer un point d'arrêt sur UIView.animateWithDuration() et l'auto.infoDetailView.alpha =... sont ceux qui Sont à la fois d'être exécutées sur le Thread 1 (com.apple.principal-thread)?

OriginalL'auteur Lord Andrei | 2016-04-05