2016-12-26 13 views
0

swift 3とiOS 8を使用してカスタムセグを作成する際に問題が発生します。1つのVCから2つのVCにフェードインしてから、2つ目のVCにフェーディングすることによって、 。下のコードを使ってカスタムセグを作成してセグを実装しようとしましたが、うまく動作しません。私の目標は、黒い四角が0.5アルファから1.0アルファになるときにアニメーションを実行し、次に2番目のビューコントローラを表示し、黒い四角を1.0アルファから0.5アルファに戻して削除することです。今、最初の部分は正しく実行されますが、アニメーションが終了すると、2番目のVCがポップアップする前に、最初のVCが短い瞬間に表示されます。移行をスムーズにして目的の結果を得るために、コードをどのように変更する必要がありますか?カスタムSegueクラスUIViewアニメーションの問題

override func perform() { 
    let sourceVC = self.source 
    let destinationVC = self.destination 

    let square = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) 
    square.alpha = 0.5 
    square.backgroundColor = UIColor.black 
    sourceVC.view.addSubview(square) 

    UIView.animate(withDuration: 0.2, animations: { 
     square.alpha = 1.0 
    }) 

    UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
     square.alpha = 0.5 
    }) { (finished) in 
     sourceVC.present(destinationVC, animated: false, completion: nil) 
    } 
} 

答えて

0

などの下にあなたのコードを更新してみてください:

UIView.animate(withDuration: 0.2, animations: { 
     square.alpha = 1.0 

UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
        square.alpha = 0.5 
       }) { (finished) in 

    DispatchQueue.main.async { 
     sourceVC.present(destinationVC, animated: false, completion: nil) 
    } 
    }) 
    } 
+0

だけ更新答え試してみて、解決しない場合は私に知らせてください。 –

+0

それは古い問題を修正しましたが、今やアニメーションの2番目の部分は実行されていないようです。黒い四角は1.0アルファになり、消えるようになり、代わりに目的地VCが表示されます。 –

+0

このブロックのすべてのUI更新タスクを書き出します。DispatchQueue.main.async {}アルファの更新などです。 –