僕の作ったswiftライブラリでMERYやby.SみたいなUIを作成する

動機

最近、Githubに何か自作のコードを置かなきゃいけない場面がありまして、簡易なSwiftのUI部分のライブラリをつくってみました。
簡単なスクロールメニューを提供するものと、CustomCellを提供するものです。
製作時間はどちらも半日くらいなので、かなりなスパゲティで、もしかしたらエラーが起こるかもしれません。時間があればメンテナンスします。
ちゃんと使えるということを証明することが本日のミッションです。


DEMO

f:id:roomae:20161126021716g:plain
このようなUIです。



Create WorkspaceDirectry

// 作業ディレクトリ作成
mkdir SampleWorkSpace
cd SampleWorkSpace



create new Xcode project

「Create a new Xcode project」→「Single View Application」
Product Name : SampleApp
Language : Swift

作成したSampleWorkSpaceディレクトリ内に作成する。

// 僕が作成したエセライブラリをclone
git clone https://github.com/tabakazu/ImageTableCellUI.git 
git clone https://github.com/tabakazu/ScrollMenuUI.git



Linked Libraries

General → Liked Frameworks and Librariesの+ボタン → Add Other... →
「SampleWorkSpace/ImageTableCellUI/ImageTableCellUI/ImageTableCellUI.xcodeproj」
「SampleWorkSpace/ScrollMenuUI/ScrollMenuUI/ScrollMenuUI.xcodeproj」を追加

もう一度、+ボタンを押して、一覧に表示される、
「ImageTableCellUI.framework」と「ScrollMenuUI.framework」を追加する。



Create 自作UIViewController作成(Table)

File → New → File → CocoaTouchClass →
Class : Sample1ViewController
Subclass.. : UIViewController

// Sample1ViewController.swift

import UIKit
/*ライブラリ追加*/
import ImageTableCellUI

class Sample1ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    /*初期設定*/
    var table: UITableView!
    let data: [[String: String]] = [
        ["title": "タイトル1", "img": "イメージのアドレス1"],
        ["title": "タイトル2", "img": "イメージのアドレス2"],
        ["title": "タイトル3", "img": "イメージのアドレス3"]
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let width: CGFloat = self.view.frame.width
        let height: CGFloat = self.view.frame.height
        /*TableViewの作成*/
        table = UITableView(frame: CGRect(x: 0, y: 0, width: width, height: height))
        table.dataSource = self
        table.delegate = self
        table.separatorInset = UIEdgeInsets.zero
        self.view.addSubview(table)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        /*TableのCellの設定*/
        let title = data[indexPath.row]["title"]!
        let img = data[indexPath.row]["img"]!
        
        if indexPath.row == 0 {
            table.register(BackImageCell.classForCoder(), forCellReuseIdentifier: "BackImageCell")
            let cell = tableView.dequeueReusableCell(withIdentifier: "BackImageCell") as! BackImageCell
            table.rowHeight = 180
            cell.setCell(title: title, img: img, height: table.rowHeight)
            return cell
        } else {
            table.register(BoxImageCell.classForCoder(), forCellReuseIdentifier: "BoxImageCell")
            let cell = tableView.dequeueReusableCell(withIdentifier: "BoxImageCell") as! BoxImageCell
            table.rowHeight = 90
            cell.setCell(title: title, img: img, height: table.rowHeight) 
            return cell
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

これをSample2ViewController.swift、Sample3ViewController.swift、Sample4ViewController.swift...と複数作る。

Edit ViewController

// ViewController.swift

import UIKit
/*ライブラリのインポート*/
import ScrollMenuUI

class ViewController: UIViewController {
    /*初期設定*/
    var menu: MenuScroll!
    var appName: String!
    var viewControllers: [UIViewController] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        /*アプリ名を代入*/
        appName = "SampleApp"
        
        /*追加する自作ViewControllerを配列にappend*/
        let vc1 = Sample1ViewController()
        vc1.title = "Sample1"
        vc1.view.frame = self.view.frame
        self.view.addSubview(vc1.view)
        self.addChildViewController(vc1)
        viewControllers.append(vc1)
        
        let vc2 = Sample2ViewController()
        vc2.title = "Sample2"
        vc2.view.frame = self.view.frame
        self.view.addSubview(vc2.view)
        self.addChildViewController(vc2)
        viewControllers.append(vc2)
        
        let vc3 = Sample3ViewController()
        vc3.title = "Sample3"
        vc3.view.frame = self.view.frame
        self.view.addSubview(vc3.view)
        self.addChildViewController(vc3)
        viewControllers.append(vc3)
        
        let vc4 = Sample4ViewController()
        vc4.title = "Sample4"
        vc4.view.frame = self.view.frame
        self.view.addSubview(vc4.view)
        self.addChildViewController(vc4)
        viewControllers.append(vc4)
        
        /*MenuScrollの引数にタイトルとViewControllerの配列、フレームサイズを*/
        menu = MenuScroll(viewControllers: viewControllers, frame: self.view.frame, appName: appName)
        self.view.addSubview(menu.view)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}



記事も適当なので、後日編集か、書き直します。