SlideShare a Scribd company logo
SnapKitについて
オープンソース勉強会
山下大輔
• 自己紹介 https://github.com/daisuke0131
• ビズリーチのiOSエンジニア
• https://github.com/daisuke0131/
ViewMonitor を作っています。星ください。PR
下さい。
use_frameworks!
pod 'Bond'
pod 'SwiftTask'
pod 'Alamofire'
pod 'SwiftyJSON'
pod 'SwiftCop'
pod 'Async'
pod 'SDWebImage'
ライブラリ的には
What s ViewMonitor
• Masonry(objective-C)のswift版ライブラリ
• 独自記述で簡単に書けそう->autoLayoutはコード
から書こうと思うとかなり辛い
• シンプルに書けそうなのでちょっとしたときに制
約を追加したりに便利そう
SnapKitについて
https://github.com/SnapKit/SnapKit
• iOS6から導入されたviewの配置を決める仕組み
• view同士の位置を制約を使って設定
• IB上からポチポチするのがデフォ。
• 画面サイズが変わったときに動的に配置が調整され
る
• viewの書き換え時に動的にviewの配置換えするのは
つらい。-> iOS9から導入されたUIStackViewがこの
辺の課題解決をしてくれそう。
Autolayoutについて
上右左のself.viewに対して
距離0を設定
高さ50を設定
autolayoutで書くと
let redView = UIView()
redView.backgroundColor = UIColor.redColor()
self.view.addSubview(redView)
view.translatesAutoresizingMaskIntoConstraints = false
redView.translatesAutoresizingMaskIntoConstraints = false
redView.addConstraint(
NSLayoutConstraint(item: redView, attribute: .Height,
relatedBy: .Equal,toItem: nil, attribute: .Height, multiplier: 1.0,
constant: 50.0)
)
self.view.addConstraints([
NSLayoutConstraint(item: redView, attribute: .Top, relatedBy: .Equal,
toItem: self.view, attribute: .Top, multiplier: 1.0,
constant: 0.0),
NSLayoutConstraint(item: redView, attribute: .Left, relatedBy: .Equal,
toItem: self.view, attribute: .Left, multiplier: 1.0,
constant: 0.0),
NSLayoutConstraint(item: redView, attribute: .Right, relatedBy: .Equal,
toItem: self.view, attribute: .Right, multiplier: 1.0,
constant: 0.0),
])
SnapKitで書くと
let redView = UIView()
redView.backgroundColor = UIColor.redColor()
self.view.addSubview(redView)
redView.snp_makeConstraints { (make) -> Void in
make.height.equalTo(50)
make.top.equalTo(view).offset(0)
make.left.equalTo(view).offset(0)
make.right.equalTo(view).offset(0)
}
IBに配置したviewの制約をいじる
IBに配置して コードから
autolayout設定
制約通りに配置
例えば以下の様なことがしたい
試すと
エラーめっちゃでる。。。
• IBにおいたviewにはいい感じに勝手に
autolayoutが設定されるっぽい。
• IB上からuse autolayoutをoffにしてやるとうま
くいく。
• 配置からコードでやる場合は問題ないです。
http://stackoverflow.com/questions/30534850/
prevent-interface-builder-from-auto-creating-
constraints
参考)
なんで?
UIStackViewを使うと便利になるよ
実行時に要素1
を消す
要素1
を詰めて表示
まとめ
• SnapKitはすごく書きやすい
• コードで完結させるときには使いやすい
• IBとかと中途半端に連携させるとつらいかも。(制
約をOutletとかで接続するとかの方がよさそう)
• ちょっとしたところで使うのはおすすめできない。
• ちょっとしたところはUIStackViewが解決してくれ
るとおもうので期待。
Autolayout制約でのエラー
Autolayoutの制約エラー
->発生してもなんとなくいい感じに表示はされます。
ここでシンボリックブレイクポイントを仕込む
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace]
Autolayoutの制約矛盾が発生した段階でブレイク
Viewの階層表示
別プロジェクトへの反映方法
http://www.slideshare.net/daisukeyamashita180/21-
potatotips-yamashita
バグのことは嫌いになってもXcodeのことは嫌いにならないでく
ださい。
http://qiita.com/daisuke0131/items/
82e85e75e766cf08745f
Xcodeに関すること

More Related Content

What's hot (20)

PPT
Node.js で Web アプリ開発
Tatsumi Naganuma
 
PDF
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
Seiko Kuchida
 
PDF
Hello, Node.js
Shin Sekaryo
 
PDF
Ember コミュニティとわたし
Ryunosuke SATO
 
PPTX
Node.jsではじめるサーバ構築
AimingStudy
 
PDF
TypeScriptへの入口
Sunao Tomita
 
PDF
a-blog cmsのインポート機能を使いこなす
Seiko Kuchida
 
PDF
jQueryを中心としたJavaScript
hideaki honda
 
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
 
PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
 
PDF
Node js 入門
Satoshi Takami
 
PDF
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
 
PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 
PDF
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
Horiguchi Seito
 
PDF
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
PDF
Jaws ug shimane-1
Mutsumi IWAISHI
 
PPTX
Type scriptmemo
ytanno
 
PDF
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
 
PDF
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Takuro Sasaki
 
PDF
いまさら聞けない!?Backbone.js 超入門
Kohei Kadowaki
 
Node.js で Web アプリ開発
Tatsumi Naganuma
 
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
Seiko Kuchida
 
Hello, Node.js
Shin Sekaryo
 
Ember コミュニティとわたし
Ryunosuke SATO
 
Node.jsではじめるサーバ構築
AimingStudy
 
TypeScriptへの入口
Sunao Tomita
 
a-blog cmsのインポート機能を使いこなす
Seiko Kuchida
 
jQueryを中心としたJavaScript
hideaki honda
 
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
 
Node js 入門
Satoshi Takami
 
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
 
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
Horiguchi Seito
 
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
Jaws ug shimane-1
Mutsumi IWAISHI
 
Type scriptmemo
ytanno
 
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
 
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Takuro Sasaki
 
いまさら聞けない!?Backbone.js 超入門
Kohei Kadowaki
 

Viewers also liked (16)

PDF
GarumとMeteoriteと私 3nd Edition ver0.04
Shinobu Okano
 
PPTX
仕事場改善
osamu miyake
 
PPTX
SORACOM Update 20151211_SORACOM UG#0
SORACOM,INC
 
PPTX
Android6.0で変わったアプリのアクセス権について
まえすとろ
 
PPTX
Githubでアカウントを晒した事故に対する対処
まえすとろ
 
PDF
10 (about make 10 with 4 numbers challenge)
Takahiro Yoshimura
 
PDF
JRebel for Android 1.0 を試食してみた
kimukou_26 Kimukou
 
PPTX
これからの「パーミッション」の話をしよう
ak_shio_555
 
PDF
20150319 testotipsio
Kazuaki Matsuo
 
PPTX
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
removed_96f4639f4009e61a478bf38f188e8404
 
PDF
Android,Brillo,ChromeOS
l_b__
 
PDF
AndroidLint #DroidKaigi
Yukiya Nakagawa
 
PDF
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Kazuki Yoshida
 
PDF
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
Masataka Kono
 
PDF
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
 
PDF
Soracom & myThingsを使ったハンズオンセミナーをやってみた
Kenichi Yoshida
 
GarumとMeteoriteと私 3nd Edition ver0.04
Shinobu Okano
 
仕事場改善
osamu miyake
 
SORACOM Update 20151211_SORACOM UG#0
SORACOM,INC
 
Android6.0で変わったアプリのアクセス権について
まえすとろ
 
Githubでアカウントを晒した事故に対する対処
まえすとろ
 
10 (about make 10 with 4 numbers challenge)
Takahiro Yoshimura
 
JRebel for Android 1.0 を試食してみた
kimukou_26 Kimukou
 
これからの「パーミッション」の話をしよう
ak_shio_555
 
20150319 testotipsio
Kazuaki Matsuo
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
removed_96f4639f4009e61a478bf38f188e8404
 
Android,Brillo,ChromeOS
l_b__
 
AndroidLint #DroidKaigi
Yukiya Nakagawa
 
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Kazuki Yoshida
 
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
Masataka Kono
 
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
 
Soracom & myThingsを使ったハンズオンセミナーをやってみた
Kenichi Yoshida
 
Ad

Similar to About SnapKit - Open source lab - (20)

PDF
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Yuichiro Saito
 
PDF
1画面から始めるStoryboard
Yuichi Fujishige
 
PDF
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 
PPTX
2016年第一回プレ卒研in山口研
dmcc2015
 
PDF
Core Graphics on watchOS 2
Shuichi Tsutsumi
 
PDF
Nullabilityについて
ishikawa akira
 
PDF
WatchKitを実際にさわってみてわかったこと
Shuichi Tsutsumi
 
PDF
SwiftとCocoaPodsで始めるサクサクiOS開発!
Koji Shiraishi
 
PDF
チーム開発にSwiftLintを導入してみた・詳細版
Ikada Kaori
 
PPTX
Ms build 触ってみよう
Oda Shinsuke
 
PDF
SwiftでObjective-Cコードに立ち向かう
Toshihiro Suzuki
 
PDF
Obj-CをSwiftにリプレースするお話
Hitoshi Saito
 
PDF
WKWebViewとUIWebView
Yuki Hirai
 
PPTX
BIOSからUEFI
Yasuaki Sera
 
PDF
javascript を Xcode でテスト
Yoichiro Sakurai
 
PDF
iOS豆知識ver0.0.5
ppengotsu Name
 
PDF
How to improve Type-safety in your Objective-C code
Chiharu Nameki
 
PDF
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
 
PDF
iOS 9 Bootcamp #6 UIKit
Shingo Hiraya
 
PDF
20150421 Geeks Night @ Money Foward
Naoki Shimizu
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Yuichiro Saito
 
1画面から始めるStoryboard
Yuichi Fujishige
 
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 
2016年第一回プレ卒研in山口研
dmcc2015
 
Core Graphics on watchOS 2
Shuichi Tsutsumi
 
Nullabilityについて
ishikawa akira
 
WatchKitを実際にさわってみてわかったこと
Shuichi Tsutsumi
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
Koji Shiraishi
 
チーム開発にSwiftLintを導入してみた・詳細版
Ikada Kaori
 
Ms build 触ってみよう
Oda Shinsuke
 
SwiftでObjective-Cコードに立ち向かう
Toshihiro Suzuki
 
Obj-CをSwiftにリプレースするお話
Hitoshi Saito
 
WKWebViewとUIWebView
Yuki Hirai
 
BIOSからUEFI
Yasuaki Sera
 
javascript を Xcode でテスト
Yoichiro Sakurai
 
iOS豆知識ver0.0.5
ppengotsu Name
 
How to improve Type-safety in your Objective-C code
Chiharu Nameki
 
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
 
iOS 9 Bootcamp #6 UIKit
Shingo Hiraya
 
20150421 Geeks Night @ Money Foward
Naoki Shimizu
 
Ad

More from Daisuke Yamashita (18)

PDF
potatotips_77.pdf
Daisuke Yamashita
 
PDF
State management for ios development
Daisuke Yamashita
 
PDF
Static analysis for go lang
Daisuke Yamashita
 
PDF
Convert the notification feature to the notification microservice
Daisuke Yamashita
 
PDF
歯磨き.go #2
Daisuke Yamashita
 
PDF
歯磨き.go Go言語の静的解析とコード生成勉強会
Daisuke Yamashita
 
PDF
ライブラリを作って5年たったので振り返る
Daisuke Yamashita
 
PDF
Tensorflow
Daisuke Yamashita
 
PDF
Introduction of ios-chart in oss-labs#3
Daisuke Yamashita
 
PDF
View Monitoring Tips
Daisuke Yamashita
 
PDF
Swift open source library - ViewMonitor -
Daisuke Yamashita
 
PDF
Let's Start Swift Open Source Activity.
Daisuke Yamashita
 
PDF
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Daisuke Yamashita
 
PDF
Unity Introduction from 2D shooting game.
Daisuke Yamashita
 
PDF
OpenCV on mobile
Daisuke Yamashita
 
PDF
Introduction of Swift from Machine Learning
Daisuke Yamashita
 
PDF
Introduction of Swift from Game Development
Daisuke Yamashita
 
PDF
How to measure UIView position on Native App
Daisuke Yamashita
 
potatotips_77.pdf
Daisuke Yamashita
 
State management for ios development
Daisuke Yamashita
 
Static analysis for go lang
Daisuke Yamashita
 
Convert the notification feature to the notification microservice
Daisuke Yamashita
 
歯磨き.go #2
Daisuke Yamashita
 
歯磨き.go Go言語の静的解析とコード生成勉強会
Daisuke Yamashita
 
ライブラリを作って5年たったので振り返る
Daisuke Yamashita
 
Tensorflow
Daisuke Yamashita
 
Introduction of ios-chart in oss-labs#3
Daisuke Yamashita
 
View Monitoring Tips
Daisuke Yamashita
 
Swift open source library - ViewMonitor -
Daisuke Yamashita
 
Let's Start Swift Open Source Activity.
Daisuke Yamashita
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Daisuke Yamashita
 
Unity Introduction from 2D shooting game.
Daisuke Yamashita
 
OpenCV on mobile
Daisuke Yamashita
 
Introduction of Swift from Machine Learning
Daisuke Yamashita
 
Introduction of Swift from Game Development
Daisuke Yamashita
 
How to measure UIView position on Native App
Daisuke Yamashita
 

About SnapKit - Open source lab -