個人サービス開発者が Material Design ガイドラインを学ぶべき理由
サービスを一人で開発するにあたって大切なことは、なんとなくパット見がきれいに見えること、使いにくさを感じないこと。
100点を目指すのではなく、60点を下回らないこと。できれば70点以上をキープしたい。
【思ってた動作と異なる動作が発生する】【明らかにデザインが崩れている】というケースをなくす。これでおそらく60点。
なぜMaterial Designを使う必要があるか。
それは、70点のデザイン(結構いいじゃん)を感じてもらうため。
Mterial Designを構成する要素の整理
70点を達成するために、マテリアルデザインにおける以下の3つの要素に注目する。
Layout
この原則が守れていないと、Material Designらしさ、統一感が失われてしまう。ガイドラインを読み込んで、Layoutの原則に従っていないことがないか要チェック。
Android開発の際にはdpとspを使うべき。fontにはsp、それ以外にはdpを使うらしい。
1dp = (160dpiのディスプレイにおける) 1px
つまりwebサービスを開発するときにpxを使うと、高解像度の端末では見た目が小さくなるということ?
- List
- Detail View
- Navigation Drawer
などを採用するときはパーツごとの余白サイズが指定されている
比率が登場するときは
- 16:9
- 3:2
- 4:3
- 1:1
- 3:4
- 2:3
を採用するとキレイに見えるらしい
タッチ可能な領域は48dpを基準にするといいと思う
Patterns
機能やデザインを実装するときに、出来る限りこのPatternに沿って開発する。
というか、MVPの段階ではこれに従わないのはコストなので、必ず従う。
Components
Components に存在しない要素を使わざるを得ない場合は本当にそれ以外に方法がないかを強く検討する。おそらく、MVPの段階では過剰な機能である。
これより下は学習の優先度を下げる
Growth & Communications
オンボーディング、機能の紹介、ジェスチャーの説明方法についてのガイドラインが書かれている。一通りの機能を実装した後にこれに従ってデザインを整える。
Motion
アニメーションなどについて書かれている。オープンソースのコンポーネントを使えばだいたいOK
Style
アニメーション、配色、タイポグラフィ、比喩表現(イラスト?)などについて書かれている。UIのブラッシュアップをしたいときに読む。
Usability
- Accesibility/Focus の内容は役に立ちそう
- Bidirectionality はアラビア語対応とかしないので関係なし?
Platforms
Webの段階では意識する必要はあまりない。
アプリ化するときにまた読む。
Resources
アイコンとか
筋トレについて
stretchpole-blog.com
このサイトに書かれてる内容を意識してごはんを食べる!
決定木って何なんだってなったので、ちょっと調べてみた
このサイトがわかりやすそう。
詳しく勉強してからまとめて記事にする予定。
www.analyticsvidhya.com
vagrantを使ってみた
このboxを利用しました。
https://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.6-x86_64-v20150426.box
- centos6.6
- chef-solo, knife-solo導入済み
chef-soloとknife-soloは導入されているが、デフォルトのレシピ読み込み先がvagrantの共有フォルダになっていないので、それを設定してあげる。
$ vagrant up $ vagrant ssh $ sudo mkdir /etc/chef/ $ sudo vi /etc/chef/solo.rb
# /etc/chef/solo.rb cookbook_path ["/vagrant/chef/cookbooks"]
knife-soloを使ってクックブックを作成
$ knife-solo cookbook create hello -o /vagrant/chef/cookbooks
chef-soloを実行
$ chef-solo -o hello
あとはレシピを書いていけばOK
UITableViewCellの左端にアイコンを追加する方法
import UIKit class PagingNavController: UIViewController, UITableViewDelegate, UITableViewDataSource { private var myTableView: UITableView! private let myItems: NSArray = ["TEST1", "TEST2", "TEST3"] override func viewDidLoad() { super.viewDidLoad() self.view.addSubview(initTableView()) } func initTableView() -> UITableView { // Status Barの高さを取得する. let barHeight: CGFloat = UIApplication.sharedApplication().statusBarFrame.size.height // Viewの高さと幅を取得する. let displayWidth: CGFloat = self.view.frame.width let displayHeight: CGFloat = self.view.frame.height // TableViewの生成する(status barの高さ分ずらして表示). myTableView = UITableView(frame: CGRect(x: 0, y: profileViewHeight, width: displayWidth, height: displayHeight - profileViewHeight)) // Cell名の登録をおこなう. myTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "MyCell") // DataSourceの設定をする. myTableView.dataSource = self // Delegateを設定する. myTableView.delegate = self return myTableView } /* Cellが選択された際に呼び出されるデリゲートメソッド. */ func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { print("Num: \(indexPath.row)") print("Value: \(myItems[indexPath.row])") } /* Cellの総数を返すデータソースメソッド. (実装必須) */ func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return myItems.count } /* Cellに値を設定するデータソースメソッド. (実装必須) */ func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // 再利用するCellを取得する. let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) // Cellに値を設定する. cell.textLabel!.text = "\(myItems[indexPath.row])" //Cellの右端に > をつける cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator //画像の追加はこれだけ! cell.imageView!.image = UIImage(named: "sample") //画像の追加はこれだけ! return cell } }
このサイトを参考にしました。
超おすすめ!
006 UITableViewでテーブルを表示 - Swift Docs
xcode 7.0でストーリーボードを使わずにxib(nib)ファイルをViewControllerにaddSubviewする方法
用意するもの
MainViewController.swift (xlibファイルを表示したいviewController)
SubView.xib
SubView.swift
var nib: UINib = UINib(nibName: "SubView", bundle: nil) var nibView: UIView? = nib.instantiateWithOwner(self, options: nil)[0] as? UIView // *1 nibView?.frame = CGRectMake(0, 0, wBounds, hBounds) view1.addSubview(nibView!)
SubView.xibからSubViewクラスのインスタンスを作成し、それをMainViewControllerのviewにaddSubviewする感じ。
SubView.swiftでインスタンスの初期化処理を書く必要がある。
*1 SubView.swiftが存在しないとエラーが出る(以下のstackoverflowを参照)
ios - What does this mean? "'NSUnknownKeyException', reason: ... This class is not key value coding-compliant for the key X" - Stack Overflow
起動時に使用するstoryboardを選択する
起動時に使用するstoryboardが設定されていないと、アプリ起動後に真っ暗になってしまう。
そんな時の解決策はこれ。
ライブラリのサンプルを書き換えてる時とかに必要になる。