ホイール読解のSDAutoLayout
2314 ワード
ほとんどのiOSアプリプロジェクトでは、開発の便利さのために、Deadlineのために他の人が作ったホイールを使用しています.これらの車輪を使うのは一般的に簡単ですが、私たちも他の人が作った車輪の背後にある原因をよく勉強しなければなりません.大神たちはどうしてこのように作ったのですか.大神たちのコードを読んで、彼らの車輪を作る思想と方法を理解することは、私たちの能力のヒントにも役立ちます.SDAutoLayoutという自動レイアウトのオープンソースライブラリのソースコードを読んだ後の理解を簡単に書きましょう.
直接コード:
上のコードは、SDAutoLayoutで1つのLabelを異なる画面に合わせる簡単な例です.簡単で暴力的で、私たちが使いやすいチェーン呼び出し方法です.SDAutoLayoutのソースコードにブレークポイントデバッグを行います.
まずsd_を実行するLayoutという方法では、いくつかのパラメータを作成して初期化してSDAutoLayoutModelというオブジェクトのインスタンスを返し、実際に自動レイアウトを開始するコードを作成します.次にleftSpaceToView()を参照すると、この方法は怠け者のロード方法であり、怠け者のロード方法ではmarginToViewblockWithKeyが実行されます.この方法は興味深いです.keyはSDAutoLayoutModelのプライベート属性leftと同じです.
このメソッドに入ると、戻り値が1つのblockであり、blockではKVCでSDAutoLayoutModelインスタンスのプロパティ(このメソッドのkey名と同じ)を設定するvalueがSDAutoLayoutModelItemのインスタンスオブジェクトであることがわかりますが、SDAutoLayoutModelインスタンスのプライベートプロパティのタイプがSDAutoLayoutModelItemであることがよくわかります.どのように以下の中で私达も作者にこれらの属性のsetの方法を提供することができて、私达がKVCを学んだばかりの时みんなはすべて知っていて、KVCのメカニズムはまずsetterの方法を呼び出して、setterの方法が探し出せないで対象が属性などがあるかどうかを探して、いかなる関连が探し出せないまで间违いを报告します.これらのsetterメソッドを見ると、このsetterメソッドが現在のviewのframeのプロパティを設定することであることがわかります.
この時点で,このサードパーティライブラリのコアがviewのframeを設定して適合していることが分かった.しかし、もう一つの違いは、この方法では黒魔法(runtime)Method Swizzingを使用し、load方法ではlayoutSubViewsを置き換えたことだ.iOSでviewのframeを設定するとlayoutSubViewというメソッドが自動的に呼び出されるので、以下はlayoutSubViewメソッドが呼び出される場合です.
置換sd_layoutSubviewsでsd_が実行されましたLayoutSubviewsHandleという方法は,異なるviewや状況に対して幅,高さなどの属性を計算し,tableViewセルの高さなどをキャッシュする方法である.次のtopSpaceToView、rightSpaceToView、heightIsなどの方法はleftSpaceToViewの方法と似ていて、大同小異で、私は一つ一つ説明しません.
このオープンソースライブラリの原理をまとめると、KVC、チェーンコール、RuntimeのMethod Swizzingなどの技術で作られたホイールです.このライブラリは他にもいくつかの機能を提供しています.私たちは普段開発しても使いやすく、開発効率を大幅に向上させることができます.仕事のほかに、著者がどのようにこれらの技術を使って車輪を作ったのか、なぜこのように書いたのかを多く学ぶことができるのも面白いことです.
直接コード:
UILabel *titleLabel = [[UILabel alloc]init];
titleLabel.text = @"test string";
[self.view addSubview:titleLabel];
titleLabel.sd_layout
.leftSpaceToView(self.view,20)
.topSpaceToView(self.view,100)
.rightSpaceToView(self.view,20)
.heightIs(20);
上のコードは、SDAutoLayoutで1つのLabelを異なる画面に合わせる簡単な例です.簡単で暴力的で、私たちが使いやすいチェーン呼び出し方法です.SDAutoLayoutのソースコードにブレークポイントデバッグを行います.
まずsd_を実行するLayoutという方法では、いくつかのパラメータを作成して初期化してSDAutoLayoutModelというオブジェクトのインスタンスを返し、実際に自動レイアウトを開始するコードを作成します.次にleftSpaceToView()を参照すると、この方法は怠け者のロード方法であり、怠け者のロード方法ではmarginToViewblockWithKeyが実行されます.この方法は興味深いです.keyはSDAutoLayoutModelのプライベート属性leftと同じです.
このメソッドに入ると、戻り値が1つのblockであり、blockではKVCでSDAutoLayoutModelインスタンスのプロパティ(このメソッドのkey名と同じ)を設定するvalueがSDAutoLayoutModelItemのインスタンスオブジェクトであることがわかりますが、SDAutoLayoutModelインスタンスのプライベートプロパティのタイプがSDAutoLayoutModelItemであることがよくわかります.どのように以下の中で私达も作者にこれらの属性のsetの方法を提供することができて、私达がKVCを学んだばかりの时みんなはすべて知っていて、KVCのメカニズムはまずsetterの方法を呼び出して、setterの方法が探し出せないで対象が属性などがあるかどうかを探して、いかなる関连が探し出せないまで间违いを报告します.これらのsetterメソッドを見ると、このsetterメソッドが現在のviewのframeのプロパティを設定することであることがわかります.
この時点で,このサードパーティライブラリのコアがviewのframeを設定して適合していることが分かった.しかし、もう一つの違いは、この方法では黒魔法(runtime)Method Swizzingを使用し、load方法ではlayoutSubViewsを置き換えたことだ.iOSでviewのframeを設定するとlayoutSubViewというメソッドが自動的に呼び出されるので、以下はlayoutSubViewメソッドが呼び出される場合です.
1. setLayoutSubviews。( )
2. addSubview 。
3. view frame 。
4. UIScrollView 。
5. Screen UIView layoutSubviews 。
6. UIView UIView layoutSubviews 。
置換sd_layoutSubviewsでsd_が実行されましたLayoutSubviewsHandleという方法は,異なるviewや状況に対して幅,高さなどの属性を計算し,tableViewセルの高さなどをキャッシュする方法である.次のtopSpaceToView、rightSpaceToView、heightIsなどの方法はleftSpaceToViewの方法と似ていて、大同小異で、私は一つ一つ説明しません.
このオープンソースライブラリの原理をまとめると、KVC、チェーンコール、RuntimeのMethod Swizzingなどの技術で作られたホイールです.このライブラリは他にもいくつかの機能を提供しています.私たちは普段開発しても使いやすく、開発効率を大幅に向上させることができます.仕事のほかに、著者がどのようにこれらの技術を使って車輪を作ったのか、なぜこのように書いたのかを多く学ぶことができるのも面白いことです.