SlideShare a Scribd company logo
1 of 25
Download to read offline
UIKitDynamicsの活用法
Shinji Kobayashi
GentleSoft
yidev 第22回勉強会
Name:Shinji Kobayashi
Twitter:@gentlejkov
GentleSoft
Who are you?
http://gentlesoft.net
2Dの物理演算を使ったアニメーションが
簡単に作成できるライブラリ
UIKitDynamicsとは
通常のアプリケーション中に物理演算の
アニメーションを簡単に導入できる
2Dの物理演算を使ったアニメーションが
簡単に作成できるライブラリ
UIKitDynamicsとは
通常のアプリケーション中に物理演算の
アニメーションを簡単に導入できる?
UIKitDynamicsの特徴
•標準で用意されている内容なら低負荷で物
理演算を実装できる
•実装自体は割と簡単
•iOS8までは標準の機能が物足りなかった
が、iOS9での機能追加により必要な物理演
算が出 ってきた
UIKitDynamicsの問題点
•物理演算に沿わない動きはできない
•思った通りに動かすのは難しい
•何に使えばいいのか分からない
UIKitDynamicsの使い道
•UIViewを物理演算に沿ったアニメーション
させて、リッチな表現をする
•画面遷移に物理演算のアニメーションを取
り入れて遊ぶ
UIDynamicItemプロトコルを実装したクラス
UIKitDynamicsの対象
•UIView
•UICollectionViewLayoutAttributes
UICollectionViewのCustumLayoutを使う
• UIAttachmentBehavior - バネ
• UICollisionBehavior - 衝突
• UIGravityBehavior - 重力
• UIDynamicItemBehavior - 物体の特性
• UIPushBehavior - エネルギー
• UISnapBehavior - 移動
UIKitDynamics(∼iOS8)
Demo
UIKitDynamics(∼iOS8)
• UIDynamicItemCollisionBoundsType
• UIFieldBehavior
• linearGravityFieldWithVector - 重力空間
• radialGravityFieldWithPosition -引力/電磁力
• noiseFieldWithSmoothness:animationSpeed
• UIAttachmentBehavior
1. limitAttachmentWithItem - ロープ
2. pinAttachmentWithItem - Google 13Hit
3. slidingAttachmentWithItem - Google 9Hit
4. fixedAttachmentWithItem - Google 10Hit
UIKitDynamics(iOS9∼)
Demo
UIDynamicAnimatorのオブジェクトを作成
実装手順
必要なBehaviorを作成し、アニメーション
させたいViewをセット
UIDynamicAnimatorにBehaviorをセット
実装(抜粋)
animator = UIDynamicAnimator(referenceView: source)
let gravity = UIGravityBehavior(items: [destination])
gravity.magnitude = 12
let collision = UICollisionBehavior(items:
[destination])
collision.addBoundaryWithIdentifier("bottom",
fromPoint: CGPoint(x: 0, y: source.bounds.height), toPoint:
CGPoint(x: source.bounds.width, y: source.bounds.height))
let item = UIDynamicItemBehavior(items: [destination])
item.elasticity = 0.5
item.resistance = 0.8
animator.delegate = self
animator.addBehavior(gravity)
animator.addBehavior(collision)
animator.addBehavior(item)
CollectionViewLayoutを継承してCustomLayoutを作成
実装手順(UICollectionView)
override func layoutAttributesForItemAtIndexPath(indexPath:
NSIndexPath) -> UICollectionViewLayoutAttributes! {
return
animator.layoutAttributesForCellAtIndexPath(indexPath)
}
override func layoutAttributesForElementsInRect(rect: CGRect) ->
[AnyObject]? {
return animator.itemsInRect(rect)
}
animator = UIDynamicAnimator(collectionViewLayout: self)
定型文
疑問点
Animatorが起動した時点で無視される
設定したAutoLayoutはどうなる?
疑問点
リアルタイムに取れる、優秀
UIViewのframeから座標は取れる?
疑問点
GestureRecognizerばっちり使える
アニメーション中のViewのタッチ判定は?
疑問点
無理、無駄
UIViewのframeに任意の座標を
設定してViewを動かせる?
疑問点
Viewを操作したい時どうする?
UIAttachmentBehaviorに操作したいViewと
移動したい位置のanchorPointを指定、
lengthを0にすると狙いの位置には動かせる
疑問点
アニメーションが終了した判定は?
すべてのオブジェクトが停止した時、
UIDynamicAnimatorDelegateの
dynamicAnimatorDidPauseメソッドが呼ばれる
疑問点
アニメーションが終了したら
Viewが元の位置に戻ったりする?
しない
Animatorを削除しても、Viewの位置はそのまま
疑問点
その時のAutoLayoutは?
分かりません
まとめ
•UIKitDynamicsはUIViewとUICollectionView
で使えて、その実装自体は容易
•大抵のパターンの物理演算を標準機能で実
装できるようになった
•アニメーションをリアルタイムに補足して、
操作することができるので、インタラクティ
ブなアニメーションに向いている
UIKitDynamicsを活用して
インタラクティブで
アニメーションリッチな
アプリを実装しよう!

More Related Content

Similar to UIKitDynamicsの活用法

運用現場で常に隣り合わせの障害対応、IIJの出した答え
運用現場で常に隣り合わせの障害対応、IIJの出した答え運用現場で常に隣り合わせの障害対応、IIJの出した答え
運用現場で常に隣り合わせの障害対応、IIJの出した答えIIJ
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装IIJ
 
2012 kanemotolablecture7
2012 kanemotolablecture72012 kanemotolablecture7
2012 kanemotolablecture7ytanno
 
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発Satoru Yamaguchi
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Atsushi Nakamura
 
MLCT#12 使われる機能目指して 測ったり試したり
MLCT#12 使われる機能目指して 測ったり試したりMLCT#12 使われる機能目指して 測ったり試したり
MLCT#12 使われる機能目指して 測ったり試したりYuji Oshima
 
sit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligencesit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligencetkimura2
 
IoT/ロボティクス時代のモニタリングとコントロール
IoT/ロボティクス時代のモニタリングとコントロールIoT/ロボティクス時代のモニタリングとコントロール
IoT/ロボティクス時代のモニタリングとコントロールMasahiro Takechi
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけようKouji Matsui
 
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術KLab Inc. / Tech
 
Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Daizen Ikehara
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるのYoshitaka Seo
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみたShingo Tamaki
 
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことShuichi Tsutsumi
 
20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetinaKazuya Hirobe
 
GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化IIJ
 
Rancherを活用した開発・運用効率の改善への取り組み
Rancherを活用した開発・運用効率の改善への取り組みRancherを活用した開発・運用効率の改善への取り組み
Rancherを活用した開発・運用効率の改善への取り組みMichitaka Terada
 

Similar to UIKitDynamicsの活用法 (20)

運用現場で常に隣り合わせの障害対応、IIJの出した答え
運用現場で常に隣り合わせの障害対応、IIJの出した答え運用現場で常に隣り合わせの障害対応、IIJの出した答え
運用現場で常に隣り合わせの障害対応、IIJの出した答え
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装
 
2012 kanemotolablecture7
2012 kanemotolablecture72012 kanemotolablecture7
2012 kanemotolablecture7
 
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
 
魅せるUIの作り方 | iOS 7エンジニア勉強会
魅せるUIの作り方 | iOS 7エンジニア勉強会魅せるUIの作り方 | iOS 7エンジニア勉強会
魅せるUIの作り方 | iOS 7エンジニア勉強会
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
MLCT#12 使われる機能目指して 測ったり試したり
MLCT#12 使われる機能目指して 測ったり試したりMLCT#12 使われる機能目指して 測ったり試したり
MLCT#12 使われる機能目指して 測ったり試したり
 
sit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligencesit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligence
 
20170720_5 MBC-IoT_IoTビジネス共創ラボ
20170720_5 MBC-IoT_IoTビジネス共創ラボ20170720_5 MBC-IoT_IoTビジネス共創ラボ
20170720_5 MBC-IoT_IoTビジネス共創ラボ
 
IoT/ロボティクス時代のモニタリングとコントロール
IoT/ロボティクス時代のモニタリングとコントロールIoT/ロボティクス時代のモニタリングとコントロール
IoT/ロボティクス時代のモニタリングとコントロール
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
 
Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみた
 
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
 
20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina
 
GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化
 
Rancherを活用した開発・運用効率の改善への取り組み
Rancherを活用した開発・運用効率の改善への取り組みRancherを活用した開発・運用効率の改善への取り組み
Rancherを活用した開発・運用効率の改善への取り組み
 

UIKitDynamicsの活用法