view monitoring tips
TRANSCRIPT
![Page 1: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/1.jpg)
View観測に関するTips
potatotips #23 山下 大輔
![Page 2: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/2.jpg)
• 自己紹介 https://github.com/daisuke0131
• ビズリーチのiOSエンジニア
• https://github.com/daisuke0131/ViewMonitor を作っています。星ください。PR下さい。
![Page 3: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/3.jpg)
オープンソースライブラリ研究会 - iOS Android Rails編 -
http://connpass.com/event/22476/
TensorFlow研究会http://d-cube.connpass.com/event/23094/
勉強会はじめました
![Page 4: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/4.jpg)
What’s ViewMonitor
![Page 5: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/5.jpg)
開発初期段階でよくある風景
デザイナ
エンジニア
プロトタイプ レイアウト指示書
デザイン反映
比較配布
テスター (チームメンバ)
フィードバック
![Page 6: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/6.jpg)
ポテトチップスについて
レイアウト指示書 実際の実装(テスト配布アプリ)
比較
60×60
8
こういう状況で問題点をみつけないといけない
14pt #0000008
ポテトチップスはしお味よりものりしお味を選ぶ傾向にあります。コンソメ味も捨てがたいですがのりしお味が食べたい。
ポテトチップスについて
ポテトチップスはしお味よりものりしお味を選ぶ傾向にあります。コンソメ味も捨てがたいですがのりしお味が食べたい。
13pt #0000008
背景 #FFFFFF
![Page 7: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/7.jpg)
import ViewMonitor
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
ViewMonitor.start() return true
}
・1line execution
->色々設定しないと使えないアプリはめんどい(引数たくさん渡すとか)
![Page 8: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/8.jpg)
method swizzling
extension UIViewController{ class func monitor_methodSwizzling_didAppearWillDisappear() { monitor_methodSwizzling_exchange(fromSelector: "viewDidAppear:", toSelector: "monitor_methodSwizzling_viewDidAppear:") } private class func monitor_methodSwizzling_exchange(fromSelector fromSelector: Selector, toSelector: Selector) { let fromMethod = class_getInstanceMethod(UIViewController.self, fromSelector) let toMethod = class_getInstanceMethod(UIViewController.self, toSelector) method_exchangeImplementations(fromMethod, toMethod) } func monitor_methodSwizzling_viewDidAppear(animated: Bool) { monitor_methodSwizzling_viewDidAppear(animated) ViewMonitor.detectedViewDidAppear(self) } }
->viewの描画イベントをフックする必要がある。
![Page 9: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/9.jpg)
view view
観測対象のviewをマークングしてタップを検出したい。
x:100 y:100
![Page 10: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/10.jpg)
view view
観測対象のviewをマークングしてタップを検出したい。
x:100 y:100
->アプリのkeyWindowから再帰的に子のviewを取得->UIbuttonを配置して対象のviewにaddSubview ->UIButton自体に重ねたviewのオブジェクトを所有させる
![Page 11: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/11.jpg)
ボタン押せなくなる問題
viewuserInteractionEnabled = false
に設定されているとその上のview のタップが取得できない。
![Page 12: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/12.jpg)
ボタン押せなくなる問題
viewuserInteractionEnabled = false
に設定されているとその上のview のタップが取得できない。
->一旦userInteractionEnabledをtrueに設定しなおして オブジェクトの参照を保持する。機能リセット時に元の状態に 戻す。
![Page 13: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/13.jpg)
![Page 14: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/14.jpg)
Objective C対応をする
![Page 15: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/15.jpg)
Objective C対応をする
pure swift。。。
![Page 16: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/16.jpg)
![Page 17: View Monitoring Tips](https://reader034.vdocuments.mx/reader034/viewer/2022042907/58794cd51a28abb1418b5201/html5/thumbnails/17.jpg)
いけてないところ
->cocoaPodsでstoryboardの利用がうまくいかずコードで無理くり 画面実装。 ->実際に目に見えないviewもたくさん存在しているので対象のview Object を絞った。
やったら面白そうだなと思っていること
->injectionとreplace(挿入と置き換え) ->UILabelを実行時に動的に書き換えたり、新しいviewを挿入するなどして 簡易的にレイアウトをいじれるようにしたら面白そう。