web-dev-qa-db-ja.com

Swift 3 UIViewアニメーション

プロジェクトをSwift 3にアップグレードしたため、自動レイアウト制約アニメーションは機能しません。具体的には、アニメーションではなく新しい位置にスナップしています。

UIView.animate(withDuration: 0.1,
               delay: 0.1,
               options: UIViewAnimationOptions.curveEaseIn,
               animations: { () -> Void in
                   constraint.constant = ButtonAnimationValues.YPosition.DefaultOut()
                   self.layoutIfNeeded()
    }, completion: { (finished) -> Void in
    // ....
})

UIViewPropertyAnimatorクラスを追加したことは知っていますが、まだ試してはいません。

18
Alex Brown

Swift 3.の最新のアップデートでもこの問題が発生しました。

正確には、ビューをアニメーション化するときはいつでも、実際にはそのビューのスーパービューでlayoutIfNeededを呼び出します。

代わりにこれを試してください:

UIView.animate(withDuration: 0.1,
           delay: 0.1,
           options: UIViewAnimationOptions.curveEaseIn,
           animations: { () -> Void in
               constraint.constant = ButtonAnimationValues.YPosition.DefaultOut()
               self.superview?.layoutIfNeeded()
}, completion: { (finished) -> Void in
// ....
})

過去に、彼らはあなたがアニメーション化したいビューを再レイアウトできることに寛大だったようです。ただし、ドキュメントでは、スーパービューで実際にlayoutIfNeededを呼び出す必要があります。

27
Enoch Ng

Swift 3.0にアップグレード

Appleデフォルトのプッシュアニメーションのような右から左へのアニメーションを表示

//intially set x = SCREEN_WIDTH
view.frame = CGRect(x: ScreenSize.SCREEN_WIDTH, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar)

UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: {
 //Set x position what ever you want
                        view.frame = CGRect(x: 0, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar)

                    }, completion: nil)
9
Saumil Shah

最初に制約の新しい値を設定してから、animateを呼び出します。

self.YOUR_CONSTRAINT.constant = NEW_VALUE
UIView.animate(withDuration: 1.0) {
    self.view.layoutIfNeeded()
}
6
abdullahselek

Swift 3.1、Xcode 8.3.2

このコードは私に適しています。ビューの変更はスローモーションでアニメーション化します。

UIView.animate(withDuration: 3.0, animations: { // 3.0 are the seconds

// Write your code here for e.g. Increasing any Subviews height.

self.view.layoutIfNeeded()

})
2

Swift 4、Xcode 10

検索用の右から左へのアニメーション

//最初にx = Your_View_Widthを設定します

    viewOfSearch.frame = CGRect(x: viewOfSearch.frame.size.width, y: 0 , width: viewOfSearch.frame.size.width, height: 50)

    UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: {
        //Set x position what ever you want
        self.viewOfSearch.frame = CGRect(x: 0, y: 0 , width: self.viewOfSearch.frame.size.width, height: 50)

    }, completion: nil)
1
func setView(view: UIView) {
        UIView.transition(with: view, duration: 1.0, options: .transitionFlipFromTop, animations: {
        })
    }
  • オプションパーツを変更して、その特定のUIViewに新しいアニメーションを適用します。
0
Raghib Arshi