SlideShare a Scribd company logo
1 of 22
Download to read offline
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

Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 
Type scriptmemo
Type scriptmemoType scriptmemo
Type scriptmemo
ytanno
 

What's hot (20)

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

Viewers also liked

10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
Masataka Kono
 

Viewers also liked (16)

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

Similar to About SnapKit - Open source lab -

福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 

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

Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
 
1画面から始めるStoryboard
1画面から始めるStoryboard1画面から始めるStoryboard
1画面から始めるStoryboard
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
2016年第一回プレ卒研in山口研
2016年第一回プレ卒研in山口研2016年第一回プレ卒研in山口研
2016年第一回プレ卒研in山口研
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 
Nullabilityについて
NullabilityについてNullabilityについて
Nullabilityについて
 
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発!
 
チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版
 
Ms build 触ってみよう
Ms build 触ってみようMs build 触ってみよう
Ms build 触ってみよう
 
SwiftでObjective-Cコードに立ち向かう
SwiftでObjective-Cコードに立ち向かうSwiftでObjective-Cコードに立ち向かう
SwiftでObjective-Cコードに立ち向かう
 
Obj-CをSwiftにリプレースするお話
Obj-CをSwiftにリプレースするお話Obj-CをSwiftにリプレースするお話
Obj-CをSwiftにリプレースするお話
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
BIOSからUEFI
BIOSからUEFIBIOSからUEFI
BIOSからUEFI
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
 
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C codeHow to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
 

More from Daisuke Yamashita

バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Daisuke Yamashita
 
Introduction of Swift from Machine Learning
Introduction of Swift from Machine LearningIntroduction of Swift from Machine Learning
Introduction of Swift from Machine Learning
Daisuke Yamashita
 
Introduction of Swift from Game Development
Introduction of Swift from Game DevelopmentIntroduction of Swift from Game Development
Introduction of Swift from Game Development
Daisuke Yamashita
 

More from Daisuke Yamashita (18)

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

About SnapKit - Open source lab -