UIView.animateWithDuration Nicht Animieren Swift (mal wieder)

Hinweis: ich habe bereits geprüft, die folgende stack-overflow-Probleme:

Sieben und zwanzig Millionen neun hundert sieben tausend fünf hundert siebzig, Zwei und dreißig Millionen zwei hundert neun und zwanzig tausend zwei hundert zwei und fünfzig, Sechs und zwanzig Millionen eins hundert achtzehn tausend eins hundert eins und vierzig, Eins und dreißig Millionen sechs hundert vier tausend drei hundert

Alles was ich versuche zu tun, ist fade animieren, in einer Ansicht (von alpha), die beim Aufruf durch eine IBAction befestigt eine Schaltfläche. Dann Umgekehrt, wenn eine Schaltfläche auf der Ansicht Treffer.

Meine Falten kann sein, dass ich die Verwendung einer zweiten Ansicht, die auf die ViewDock in der storyboard-Ansicht. Die Ansicht wird Hinzugefügt, um die Untersicht zu der Zeit der viewDidLoad-wo der Rahmen/Grenzen sind festgesetzt, um die gleiche wie die superview (eine vollständige Zwischenstopp)

Der Grund, warum dies getan wird als overlay anzeigen, da es ein tutorial Indikator.

Das Ergebnis (wie viele andere, die aufgeführt haben dieses problem) ist, dass die Sicht (und die enthaltenen Steuerelemente) einfach spontan erscheint und verschwindet sofort. Kein verblassen.

Habe ich versucht animationWithDuration mit Verzögerung, mit und ohne Abschluss, mit übergang, und sogar angefangen, mit der alten UIView.beginAnimations.

Nichts funktioniert. Vorschläge sind herzlich willkommen.

Den code in etwa so geradlinig, wie ich es machen kann:

Edit: Erweitert den code um alles relevante

Edit2: TL;DR Alles funktioniert mit der Ausnahme von UIViewAnimateWithDuration das scheint zu ignorieren, den block und die Dauer und führen nur den code inline als sofort-UI ändern. Die Lösung dieses bekommt die 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()
}

Bitte beachten Sie, angefangen habe ich mit dem folgenden:

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
    })
}
"Der Ansicht Hinzugefügt, um die Untersicht zu der Zeit der viewDidLoad" <- mal sehen, code.
FWIW, die Sie übergeben können, 'nil' als Abschluss Blöcke hier. Auch wenn Sie Blockaden haben, die Sie sicherlich nicht wieder alles. Ich bin überrascht, dass der Swift-compiler nicht-flag, das als ein Fehler.
Ich fügte hinzu, alle relevanten code oben. Ich versuchte es mit und ohne return, wie gezeigt, in der original-pre-tweaked fehlerhaften code.
Schließlich. Der view angezeigt und konfiguriert, Prima. Alles ist da, wo es sein soll. Alle UI-Elemente funktionieren und drehen passt der Inhalt von Einschränkungen. Das EINZIGE Problem ist, dass die alpha-änderung wird nicht ausgeführt, wie eine fade. Einfach eine sofortige erscheinen.
Dein code sieht korrekt. Ich habe gesehen, unerwartete UI-Verhalten wie diese, wenn es threading Probleme an anderer Stelle in der app. Versuchen Sie, einen Haltepunkt auf UIView.animateWithDuration() und self.infoDetailView.alpha =... Sind diese beiden wird ausgeführt Thread 1 (Kom.apple.main-thread)?

InformationsquelleAutor Lord Andrei | 2016-04-05

Schreibe einen Kommentar