BWWalkthroughを使ってみた

とりあえず、*[BWWalkthrough][1]*を*DL*

![Move](https://camo.githubusercontent.com/da60dc338f1325ad6f317e850d79ec135e64b116/687474703a2f2f7777772e7468696e6b616e646275696c642e69742f676966732f425757616c6b7468726f7567685f6d696e69322e676966)

ビルドするとこんな感じの動き

# ちょっとだけ解説

まず、*Storyboard*が二つ用意されている。

- *Main.storyboard*
- *Walkthrough.storyboard*

起動すると、すぐに*Walkthrough.storyboard*のものが表示されているが

```ViewController.swift
override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        let userDefaults = NSUserDefaults.standardUserDefaults()
        
        if !userDefaults.boolForKey("walkthroughPresented") {
            
            showWalkthrough()
            
            userDefaults.setBool(true, forKey: "walkthroughPresented")
            userDefaults.synchronize()
        }
    }
```

*userDefaults.boolForKey("walkthroughPresented")*が*true*でなかった場合
*showWalkthrough()*メソッドを読みにいっている

```ViewController.swift
@IBAction func showWalkthrough(){
        
        // Get view controllers and build the walkthrough
        let stb = UIStoryboard(name: "Walkthrough", bundle: nil)
        let walkthrough = stb.instantiateViewControllerWithIdentifier("walk") as! BWWalkthroughViewController
        let page_zero = stb.instantiateViewControllerWithIdentifier("walk0") as! UIViewController
        let page_one = stb.instantiateViewControllerWithIdentifier("walk1") as! UIViewController
        let page_two = stb.instantiateViewControllerWithIdentifier("walk2")as! UIViewController
        let page_three = stb.instantiateViewControllerWithIdentifier("walk3") as! UIViewController
        
        // Attach the pages to the master
        walkthrough.delegate = self
        walkthrough.addViewController(page_one)
        walkthrough.addViewController(page_two)
        walkthrough.addViewController(page_three)
        walkthrough.addViewController(page_zero)
        
        self.presentViewController(walkthrough, animated: true, completion: nil)
    }
```
*showWalkthrough()*では、*Storyboard*を指定してページング用のページに各*View*を割り当てたのちに表示している。

*Walkthrough*で表示される*View*にある各種ボタンの処理は、*BWWalkthroughViewController*内に記述されている。

```BWWalkthroughViewController.swift

    @IBAction func nextPage(){
        
        if (currentPage + 1) < controllers.count {
            
            delegate?.walkthroughNextButtonPressed?()
            
            var frame = scrollview.frame
            frame.origin.x = CGFloat(currentPage + 1) * frame.size.width
            scrollview.scrollRectToVisible(frame, animated: true)
        }
    }
    
    @IBAction func prevPage(){
        
        if currentPage > 0 {
            
            delegate?.walkthroughPrevButtonPressed?()
            
            var frame = scrollview.frame
            frame.origin.x = CGFloat(currentPage - 1) * frame.size.width
            scrollview.scrollRectToVisible(frame, animated: true)
        }
    }
    @IBAction func close(sender: AnyObject){
        delegate?.walkthroughCloseButtonPressed?()
    }
```

とくに、動きを変更しないのであれば、*Walkthrough.storyboard*の*View*にある画像やテキストを変えるだけで対応できる。*View*を増やして、*ViewController.swift*の*showWalkthrough()*メソッドで指定してあげれば対応できる。

*userDefaults*を使っているので、二回目以降は起動時に説明文がでなくなる。




[1]:https://github.com/ariok/BWWalkthrough