AlloyフレームワークでTiFlatUIKitを使ってコードもiOSアプリもフラットデザイン化


こんにちは．Titanium新参者ですが，[Titanium Advent Calendar 2014](http://qiita.com/advent-calendar/2014/titanium)の七日目を担当させて頂きます！

#TiFlatUIKitがCuuuuute！
とにかく自分にはデザインのセンスが無い．メンバーにアプリデザインをホワイトボードに書いても「その生き物はなんなのか」，「その絵のせいで何もわからなくなってしまった」と言われるほど絵心もない．
そんな自分でもキュートなFlatデザインのiOSアプリを簡単に作れる．そうTiFlatUIKitなら！
TiFlatUIKitは，iOSネイティブで作られた[FlatUIKit](https://github.com/Grouper/FlatUIKit)をKeisuke UchidaさんがTitaniumモジュールとして使えるようにして頂いたもの（参考：[TiFlatUISample[Titanium User Meet Up at Nifty]](http://www.slideshare.net/uchidak1124/20130717tiusermeetup)）で，実際に使ってみるととてもいい！

![スクリーンショット 2014-12-07 20.29.01.png](https://qiita-image-store.s3.amazonaws.com/0/46334/b20390fa-9817-849f-9d0e-89cd97412c94.png "スクリーンショット 2014-12-07 20.29.01.png")![スクリーンショット 2014-12-07 22.09.28.png](https://qiita-image-store.s3.amazonaws.com/0/46334/00c0a038-3c81-4dc9-5983-607da32ec406.png "スクリーンショット 2014-12-07 22.09.28.png")

今回は，TiFlatUIKitの導入からAlloyでの使い方までを書きます．

#使い方
##TiFlatUIKitモジュールのインポート
Githubにある[uchidaknet/TiFlatUIKit](https://github.com/uchidaknet/TiFlatUIKit)をダウンロードします．

Titanium公式ドキュメントの[Using a Module](Using a Module)を参考にグローバルにモジュールをインポートします．今までモジュールはプロジェクトフォルダに配置していたので，初グローバルインポート体験しました．

Titanium Studioのメニューバーから[Help]→[Install Moblie Module...]を選択します．

以下のように，先ほどダウンロードしたTiFlatUIKitのフォルダ内にある，net.uchidak.tiflatuikit-iphone-0.0.1.zip を[Install from URL]に設定します．[OK]を押してインポート完了です！

![スクリーンショット 2014-12-07 22.07.47.png](https://qiita-image-store.s3.amazonaws.com/0/46334/2a8aceeb-06f7-272d-be2f-55b02fd7a516.png "スクリーンショット 2014-12-07 22.07.47.png")


##tiapp.xmlへの登録
Titaniumプロジェクトをclassicで作成し，tiapp.xmlのOverviewにあるModulesの+ボタンを押します．

先ほどのインポートが成功していると，以下のようにTiFlatUIKitのモジュールがあるので選択して[OK]を押すことでtiapp.xmlに登録できます．

![スクリーンショット 2014-12-07 22.18.54.png](https://qiita-image-store.s3.amazonaws.com/0/46334/1e7b7faa-5928-4a5c-3965-34dd4f0204d2.png "スクリーンショット 2014-12-07 22.18.54.png")


いやーここまではCLIでやるよりもTitanium Studioを使ったほうが楽ですね．ただQiitaに書く際に画面を貼らないといけないのが大変ですが．

##Hello TiFlatUIKit!
あとは，TiFlatUIKitリポジトリにある[example](https://github.com/uchidaknet/TiFlatUIKit/blob/master/example/app.js)を参考にしつつ書けば，超CuuuuteなUIを作ることができる！

#やっぱりAlloyで使いたい
とはいえここまできたらclassicじゃなくてAlloyフレームワークを使ってコードも分けて書きたい！と思ってきたぞ．

##準備
alloy.jsでTiFlatUIKitをrequireすることで，AlloyのViewの名前空間でTiFlatUIKitを使うことができます．

```app/alloy.js
Alloy.Globals.tiFlatUI = require('net.uchidak.tiflatuikit');
```

##記述
ボタンを表示し，クリックしたらコンソールにボタンイベントの返り値をを表示するプログラムは以下のようになります．

ViewのButtonタグに，nsで先ほどグローバルに記述したtiFlatUIを設定することで，TiFlatUIkitのcreateButtonを利用することできます．あとは普通にAlloyで開発するように書けばOK!
ただし，stylesに "Button" : {} のようにタグ名での適用はできないので注意．

```app/view/index.xml
<Alloy>
  <Window class="container">
    <Button ns="Alloy.Globals.tiFlatUI" id="flatButton" onClick="showDebug" />
  </Window>
</Alloy>
```

```app/styles/index.tss
".container": {
  backgroundColor:"#f8f8f8",
}

"#flatButton" : {
  width : "80%",
  height : 60,
  title : 'Button',
  font : {
    fontSize : 20,
    fontWeight : 'bold'
  },
  color : '#f8f8f8',
  selectedColor : '#ccc',
  buttonColor : '#1abc9c',
  shadowColor : '#16a085',
  shadowHeight : 5,
  cornerRadius : 4,
  enabled : true
}
```

```app/controller/index.js
Ti.API.info("module is =>");
Ti.API.info(Alloy.Globals.tiFlatUI);

function showDebug(e) {
  Ti.API.debug(e);
}

$.index.open();
```

![スクリーンショット 2014-12-07 23.38.50.png](https://qiita-image-store.s3.amazonaws.com/0/46334/65a231f2-45a4-0c35-b1b6-1e3eb0195f90.png "スクリーンショット 2014-12-07 23.38.50.png")


##exampleをAlloy化してみました！
公式の[example](https://github.com/uchidaknet/TiFlatUIKit/blob/master/example/app.js)をAlloyで書いてみました．参考にしてみてください．
[s4shiki/TiFlatUIKit_Example_Alloy](https://github.com/s4shiki/TiFlatUIKit_Example_Alloy)

#次回は
Advent Calendarに初めて参加できてよかったです！TiFlatUIKit自体は１年前からあるので，やっている人には参考にならないと思いますが，この記事を見てこれからTitaniumをやってみたいという人が増えてくれれば幸いです．

明日は，[@dksg](http://qiita.com/dksg)さんです．楽しみにしています！よろしくお願いいたします．