2016-08-22 8 views
1

アニメーションのフェードインとフェードアウトに問題があります。SwiftのUIViewの特定のポイントからフェードアニメーションを開始します

私は簡単な設定をしていますが、私にはUIViewという名前のmyViewがあります。

私がしたいことは、ユーザが画面に触れるとフェードインし、myViewは画面に触れなくなるとフェードアウトします。私は以下のコードでそれを達成することができます。フェードは5秒以上起こります。

しかし、フェードインまたはフェードアウトアニメーションの途中でユーザーがタッチしたりタッチしたりするのをやめ始めると問題が発生します。何実際に発生することにジャンプalphamyViewでユーザが正常に現在の位置にmyViewフェードインを停止し、フェードアウトアニメーションと反転代わりにフェードインアニメーション、画面に触れる停止例えば

、フェードアウトを開始する前に1.0

質問:

、-フェードインやフェードアウトをそれぞれの新しい アニメーションことを確実にするためになされる必要がある次のコードに変更何、現在のフェードアニメーション がmyViewで発生した割り込み、以前のフェードアニメーション の現在のalphaから始まりますか?

コード:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var myView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.myView.alpha = 0 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     UIView.animateWithDuration(5, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { 
      self.myView.alpha = 1 
     }, completion: nil) 
    } 

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    } 

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     UIView.animateWithDuration(5, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { 
      self.myView.alpha = 0 
     }, completion: nil) 
    } 

} 
+1

私は怒りのために私を許しますが、なぜ地球上誰もこの質問をd​​ownvoteだろうか?それは美しく、有益に、そしてはっきりと尋ねられます。これは、スタックオーバーフローに関する質問をする方法です。 _model_質問です。 – matt

+0

ありがとう、親切。私は可能な限り明確な質問を構造化しようとします。 – user4806509

+0

絶対に。 downvotesによって落胆しないでください。 – matt

答えて

2

問題は、あなたのtouchesEndedアニメーションがtouchesBeganアニメーションが削除される原因となって、あなたは1にalphaを設定している瞬間のために明らかにし、あなたのtouchesBeganアニメーションを中断していることです。

これを防ぐには、options:.beginFromCurrentStateオプションを含めます。

+0

うわー、それはそれほど簡単でした。ありがとうございました。私はこのようなアニメーションオプションを更新し、うまくいきました。 (なぜ 'BeginFromCurrentState'がデフォルトの状態でないのでしょうか?) ' options:[UIViewAnimationOptions.CurveEaseInOut、UIViewAnimationOptions.BeginFromCurrentState] ' – user4806509

+1

あなたの質問には手がかりがありました!あなたは非常に正しく言った: "それぞれの新しいアニメーションが、以前のフェードアニメーションの現在のアルファから始まることを保証する"。あなたは問題が何であるかを正確に発見しました。よくやった。 – matt

+1

PS私の '.begin'の小文字は、それがSwift 3のスペルです。私は今日Swift 3で全然考えているのでしょうか? – matt

関連する問題