5466


起動時にアニメーション処理が行われ、ボタンを押した時に再びアニメーション処理を行うといった動作がしたい場合、どのようにコーディングしていけばいいでしょうか？

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        @IBOutlet weak var textLabel: UILabel!
    
        @IBAction func actionButton(sender: AnyObject) {
    
            //ここにアニメーションの動作を書きたい。
    
        }
    
        @IBOutlet weak var imageView: UIImageView!
    
        override func viewDidAppear(animated: Bool) {
            imageView.hidden = false
            imageView.frame = CGRect(x: 100, y: 37, width: 240, height: 377)
            //8.0秒間で位置を変える
            UIView.animateWithDuration(8.0, delay:0.5,
                options: UIViewAnimationOptions.CurveEaseInOut,
                animations: {() -> Void in
                    //アニメーションの処理
                    self.imageView.frame = CGRect(x: 400, y: 37, width: 240, height: 377)},
                completion:{(Bool) -> Void in})
        }
    }
    
[/code]

１回目(起動時)のアニメーション処理のコードは書けたのですが、  
ボタンを押した時のアニメーション処理が分からず・・・  
クロージャをはずして書き込もうと思ったのですが、動作できず失敗しました。

ちなみにアニメーション処理は

[code]

    //起動時(アニメーション前)
    imageView.frame = CGRect(x: 100, y: 37, width: 240, height: 377)
    
    //起動時(アニメーション後)
    imageView.frame = CGRect(x: 400, y: 37, width: 240, height: 377)
    
    //ボタンを押した時のアニメーション処理
    imageView.frame = CGRect(x: 100, y: 37, width: 240, height: 377)
    
[/code]

お詳しい方がいましたらご回答宜しくお願い致します。


CC BY-SA 3.0
2015-01-27T12:12:40.307
5431
2015-01-28T01:51:39.380
5832
question
swift
特定の条件下においてのアニメーション処理

[code]

    @IBAction func actionButton(sender: AnyObject) {
        UIView.animateWithDuration(8.0, delay:0.5,
            options: UIViewAnimationOptions.CurveEaseInOut,
            animations: {() -> Void in
                //アニメーションの処理
                self.imageView.frame = CGRect(x: 100, y: 37, width: 240, height: 377)},
            completion:{(Bool) -> Void in})
    }
    
[/code]

問題を深く考えすぎのように見えます。話は単純で、「UIView.animate」以下、そのまま書き写せばいいのです。  
なお、このコードはむだな部分が多くあります。次のように書きかえることができます。

[code]

    @IBAction func actionButton(sender: AnyObject) {
        UIView.animateWithDuration(8.0, delay: 0.5,
            options: UIViewAnimationOptions.CurveEaseInOut,
            animations: {self.imageView.center = CGPoint(x: 220, y: 225.5)},
            completion: nil)
    }
    
[/code]

Closureは、引数と返り値を使わないのであれば、省略可能。  
メソッド「animation〜」の引数「completion」は、「completion: ((Bool) ->
Void)?)」となっており、オプショナル型なので、使わなければnilを入れておくことができます。  
ビューの移動は、プロパティcenter（CGPoint）を変更するだけです。frame（CGRect）を使うより、入力する値が少なく、人為的なミスを減らすことができます。


CC BY-SA 3.0
2015-01-27T23:14:24.797
5466
2015-01-28T01:51:39.380
2015-01-28T01:51:39.380
7362
7362
5431
answer