2016-10-29 7 views
12

私はUIViewを画面中央に配置しています。ユーザーがボタンを押すと、スクリーンの上に移動して、サイズの約5分の1に縮小します。アニメーションをスケールして移動するUIView(swift)

私はこれを試してみました:唯一のビューをスケーリングすることを

UIView.animateWithDuration(0.7) {() -> Void in 
      self.main.transform = CGAffineTransformMakeScale(0.2, 0.2) 
      self.main.transform = CGAffineTransformMakeTranslation(0, -250) 
     } 

しかし、いくつかの理由で

、。私もanimateWithDurationに入れようとしました:

self.main.frame = CGRectMake(self.view.frame.width/2 - 10, 50, 50, 50) 

どのアニメーションを動作させるにはどうしたらいいですか?

答えて

5

彼のGIFが説明どおりに上記ジョーの答えはありませんが、それは本当にそれ以来、あなたの質問に答えていませんを翻訳すると、はビューを縮尺します(同時に平行移動とスケーリングの両方を行うのではなく)。あなたの問題は、アニメーションブロックでビューのトランスフォームを設定して、その値をすぐに別のトランスフォームで上書きすることです。翻訳とスケールの両方を同時に達成するには、次のようなものが必要です。

@IBAction func animateButton(_ sender: UIButton) { 
    let originalTransform = self.main.transform 
    let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2) 
    let scaledAndTranslatedTransform = scaledTransform.translatedBy(x: 0.0, y: -250.0) 
    UIView.animate(withDuration: 0.7, animations: { 
     self.main.transform = scaledAndTranslatedTransform 
    }) 
} 
+0

解決に感謝します。しかし、翻訳は私の見解を相対的に動かします。 x = 100 y = 100 positionのように画面座標を修正してください。翻訳されたものがあなたの現在の位置に相対的な位置に移動することを認識しています。 –

+0

@ Md.Sulayman目的のx座標とy座標の差とUIViewの座標を計算し、その量だけUIViewを変換する必要があります。コード例を見たい場合は、別の質問を開いてここにリンクしてください:) – WongWray

18

UIView animationはいくつかの方法でスウィフトで達成することができます。コードの下には、単純なアプローチ...

class ViewController: UIViewController { 

@IBOutlet weak var animationButton: UIButton! 
@IBOutlet weak var myView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // I added seperate colour to UIView when animation move from one animation block to another.So, You can get better understanding how the sequence of animation works. 
    self.myView.backgroundColor = .red 
} 

@IBAction func animateButton(_ sender: UIButton) { 

    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIViewAnimationOptions.curveEaseIn, animations: { 
     //Frame Option 1: 
     self.myView.frame = CGRect(x: self.myView.frame.origin.x, y: 20, width: self.myView.frame.width, height: self.myView.frame.height) 

     //Frame Option 2: 
     //self.myView.center = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/4) 
     self.myView.backgroundColor = .blue 

     },completion: { finish in 

    UIView.animate(withDuration: 1, delay: 0.25,options: UIViewAnimationOptions.curveEaseOut,animations: { 
     self.myView.backgroundColor = .orange  
     self.myView.transform = CGAffineTransform(scaleX: 0.25, y: 0.25) 

     self.animationButton.isEnabled = false // If you want to restrict the button not to repeat animation..You can enable by setting into true 

     },completion: nil)}) 

     } 
    } 

出力です:

enter image description here

+0

こんにちは。私はこれをしましたが、ムービーはムービー作成後に縮小されました。 –

+0

@ Md.Sulaymanは、ポストの全体的なアイデアがアニメーションの後にビューを縮小しています。投稿をもう一度読む。そして、あなたが達成しようとしていることを教えてください。 – Joe

+0

しかし、アニメーション後に画像のアスペクト比が失われてしまったので、シュリンクは問題ではありません。 –

関連する問題