UIScrollViewとUIPageControlで公式twitterアプリっぽいView作ってみた

## 概要
最近Swiftで何かアプリ作ろうと企んでいましたが、やっと行動にうつせています。そこで、作っているアプリのメイン画面どうする？みたいな話になったときに、tabでview切り替えればいいのではないかと思ったけど、それだったら公式twitterみたいにスワイプで切り替えられたらカッコイイよねって話になって、作ることになりました。

## ScrollView
まずScrollViewを定義したあとにモロモロの設定をする。

```swift
class ViewController: UIViewController, UIScrollViewDelegate {

    let BETWEEN_WIDTH = CGFloat(5)
    let NUMPAGES = 3
    var barColor = UIColor(red: CGFloat(0.18), green: CGFloat(0.80), blue: CGFloat(0.44), alpha: CGFloat(1.0))
    var pageControl = UIPageControl()
    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        self.navigationController?.navigationBar.barTintColor = barColor
        self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
        self.navigationController?.navigationBar.titleTextAttributes = 
            [NSForegroundColorAttributeName: UIColor.whiteColor()]

        scrollView.contentSize = CGSizeMake((self.view.frame.size.width + BETWEEN_WIDTH * 2)
             * CGFloat(NUMPAGES), self.view.frame.size.height)
        
        scrollView.pagingEnabled = true // ページするオプションを有効にするための設定
        scrollView.scrollEnabled = true
        scrollView.directionalLockEnabled = true
        scrollView.showsHorizontalScrollIndicator = false
        scrollView.showsVerticalScrollIndicator = true
        scrollView.bounces = true
        scrollView.scrollsToTop = false
        scrollView.delegate = self
```

## PageControl
上記でScrollViewをページっぽくする設定もしたので、現在のページを示すためにPageControlを設置します。

```swift
        self.navigationItem.titleView = pageControl
```

下記の設定によりページを切り替えた時にPageControlも変更するように設定する

```swift
    func scrollViewDidScroll(scrollview: UIScrollView) {
        var pageWidth : CGFloat = self.scrollView.frame.size.width
        var fractionalPage : Double = Double(self.scrollView.contentOffset.x / pageWidth)
        var page : NSInteger = lround(fractionalPage)
        self.pageControl.currentPage = page;
    }
```

僕はnavigationBarにpageControlを設置したかったので、上記の感じにしました。

## ScrollViewにViewを追加する

```swift
        var redView = UIView(frame: CGRect(x: BETWEEN_WIDTH, y: 0, 
            width: self.view.frame.size.width, height: self.view.frame.size.height))
        redView.backgroundColor = UIColor.redColor()
        scrollView.addSubview(redView)
        
        var blueView = UIView(frame: CGRect(x: self.view.frame.size.width + BETWEEN_WIDTH * 3, y: 0, 
            width: self.view.frame.size.width, height: self.view.frame.size.height))
        blueView.backgroundColor = UIColor.blueColor()
        scrollView.addSubview(blueView)
        
        var yellowView = 
            UIView(frame: CGRect(x: ((self.view.frame.size.width + BETWEEN_WIDTH * 3) * 2) - BETWEEN_WIDTH, 
            y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
        yellowView.backgroundColor = UIColor.yellowColor()
        scrollView.addSubview(yellowView)
        
        self.view.addSubview(scrollView)
    }
```

## レイアウト
このままだとスクロールの枠とViewが対応しないのと、viewとviewの間にスペースを空けたいと思っているので、その設定をする必要があります。Objective-Cだとコードから簡単に出来る感じだったけど、swiftだと少し違う感じだった。仕方なくStoryboardで設定することにした。
まずScrollViewのサイズをiPhone6とかいろんな画面に対応させるための設定をします。
![Screen Shot 2014-10-05 at 1.03.37.png](https://qiita-image-store.s3.amazonaws.com/0/32211/d123fb7f-ecd4-2e43-76ed-e548a5e193a1.png)

次に、ScrollViewの画面の大きさを設定します。下記のようなイメージです。
![101006-0020.png](https://qiita-image-store.s3.amazonaws.com/0/32211/2bc9e75e-15a1-4552-82ca-c743ddd72790.png)

この画像のScrollView.frameというのを適切に設定する必要があるが、出来なかったという話であるが、下記のようにStoryboardで設定することが出来た。
![Screen Shot 2014-10-05 at 1.40.59.png](https://qiita-image-store.s3.amazonaws.com/0/32211/0d3d09d7-44f7-114e-0952-4416ac6f1cba.png)

あと、Constrain to marginsという項目のチェックを外すの忘れないようにしてください。左と右の幅の設定は適宜変更して下さい。

## 実行結果
こんな感じでそれぞれのviewの間に余白も設定出来ました :)
![8416c485d604bc5d475283cc85437a98.gif](https://qiita-image-store.s3.amazonaws.com/0/32211/954100ac-b37d-5505-604e-34b826bd88b7.gif)

## 参考URL
* UIScrollView - ページスクロールで空白を挟む : http://cocoadays.blogspot.jp/2010/09/uiscrollview.html