Xibファイルをアニメーションさせる

フッター的なものXibを作って、出し入れしたかったので、練習でつくりました〜。
![XibAnimation.gif](https://qiita-image-store.s3.amazonaws.com/0/158705/74f55143-abb0-15a7-e7ed-7af6c49ebe5d.gif)


## 1.Xibファイルを作る

詳しくは[こちら](http://dev.classmethod.jp/smartphone/xib/)(参考)

新しいUIViewファイルを作って　.xibと名前をつけて保存します。
![Screen Shot 2017-07-07 at 8.33.14 PM.png](https://qiita-image-store.s3.amazonaws.com/0/158705/29531138-9fec-1c43-4cd4-d7ea2b2ef02c.png)


## 2. Xibファイルのサイズを変更する

Xibファイルを"Freeform"に変更してheightを100に変更！
ついでに、Autoresizingも全部矢印をつける！
![Screen Shot 2017-07-08 at 5.53.12 PM.png](https://qiita-image-store.s3.amazonaws.com/0/158705/e7f83902-e5fb-c110-3baa-4931003d69f9.png)

### エラー注意：
中に色々ImageViewやLabelを入れる場合は、Auto Layout のチェックをオフにしないと、エラーが起きる。
![Screen Shot 2017-07-09 at 12.16.49 AM.png](https://qiita-image-store.s3.amazonaws.com/0/158705/57edb7b5-57c7-6109-ce5f-4c8ca4b4ad2c.png)



## 3. Xibファイルを制御するクラスを作って繋げる

### 1. Xibファイルと同じ名前でswiftファイルを作る

```SampleView.swift
import UIKit
class SampleView: UIView {

    override init(frame: CGRect) {
        super.init(frame:frame )
        loadXibView()

    }
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            loadXibView()
        }
    
        func loadXibView() {
            let view = Bundle.main.loadNibNamed("SampleView", owner: self, options: nil)?.first as! UIView
            view.frame = self.bounds
            self.addSubview(view)
        }
}
```
ちなみに、loadNibNamed(Xibファイル名)はXibファイルを読み込むメソッドです。

## 4.Xibファイルにクラス指定する
.xibファイルのFile Ownerに新しく作ったswiftファイルの名前をつける。
![Screen Shot 2017-07-08 at 9.16.35 PM.png](https://qiita-image-store.s3.amazonaws.com/0/158705/5b514c59-dea0-27f2-4294-f8b3889567a7.png)


よくあるxibエラーへの参考! https://stackoverflow.com/questions/30335089/reuse-a-uiview-xib-in-storyboard

## 5. ストーリーボードでXibを出すUIView作成　+ ボタン作成
![Screen Shot 2017-07-08 at 6.14.46 PM.png](https://qiita-image-store.s3.amazonaws.com/0/158705/ec72fe42-1da9-91af-b900-7a1e9fb22e91.png)

これが終わったら、
UIViewのOutletと、ButtonのAction OutletをViewControllerに作っておく。

## 6. ViewControllerの中

```ViewController.swift
import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var myView: UIView!

    var isVisible = true

    override func viewDidLoad() {
        super.viewDidLoad()
        self.loadTemplate()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        myView.center.y  += view.bounds.height
    }
    
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        UIView.animate(withDuration: 0.5, delay: 0.3, options: [],
                       animations: {
                        self.myView.center.y -= self.view.bounds.height
        },
                       completion: nil
        )
    }
    
    func loadTemplate(){
        let view = SampleView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height))
        myView.addSubview(view)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    @IBAction func tapped(_ sender: UIButton) {

        
        UIView.animate(withDuration: 0.5, delay: 0.3, options: [],
                       animations: {
                        
                        if self.isVisible{
                            self.myView.center.y += self.view.bounds.height
                            self.isVisible = false
                        } else{
                            self.myView.center.y -= self.view.bounds.height
                            self.isVisible = true
                        }
        },
                       completion: nil
        )
    }
}
```

完成コードは[こちら](https://github.com/Saayaman/i0S/tree/master/UIAnimation)