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