UICollectionViewDelegateFlowLayout uicollectionViewFlowLayoutの違い
質問
UICollectionViewFlowLayoutがクラスである間は、UICollectionViewDelegateFlowLayoutがプロトコルであることを知っています。プロトコルとクラスの違いを知っています。私の理解から、UicollectionViewDelegateFlowLayoutプロトコルに従ってクラスを作成して、UicollectionViewFlowLayoutから継承されたクラスを持つのとまったく同じ効果を得ることができます。プロトコルとクラスの間のような関係を見つけることによってこの結論に達します。 UICollectionViewDelegateFlowLayout -------------- UICollectionViewFlowLayout. CollectionView:Layout:SizeForItematIndexPath:------ Itemize. CollectionView:レイアウト:InsetForSectionAtIndex:---- SectionInset - CollectionView:Layout:ReferencesizeForHeaderInsection: - headerReferencesize - CollectionView:レイアウト:ReferencesizeForFooterInsection: - FooterReferencesize
プロトコルの参照で次のようにします。 「このプロトコルのすべてのメソッドはオプションです。特定のメソッドを実装していない場合、フローレイアウトの代理店は適切な間隔情報に対して独自のプロパティで値を使用します。 だから私の理解は次のとおりです.CollectionViewにレイアウトプロパティとDelegateFlowLayoutがある場合、DelegateFlowLayoutは潜在的に何かを上書きすることができます。言い換えれば、私は両方を持つことができ、プロトコルはより高い優先順位を取ります。右?
だから、プロトコルを発明し、同じことをするクラスの背後にある論理は何ですか?
解決
フローレイアウトクラスは、ほとんどの場合ではないにしても、多くの中で機能する「デフォルト」フローレイアウトの種類です。 UICollectionViewFlowLayoutが処理できないことが必要な場合は、UICollectionViewLayoutをサブクラス化して追加機能を提供できます。
デリゲートメソッドは、デフォルトのUICollectionViewFlowLayoutのデリゲートコールを介して、いくつかの限られたカスタマイズを提供するだけです。
DOCSから、「UICollectionViewDelegateFlowLayoutプロトコルは、Gridベースのレイアウトを実装するためにUICollectionViewFlowLayoutオブジェクトと調整できるメソッドを定義します。このプロトコルのメソッドは、項目のサイズとグリッド内の項目間の間隔を定義します。 / P>彼らは同じことをしません。プロトコルは、デリゲートメソッドのないフローレイアウトがデフォルトで行われないような何かを実行できるようにするために提供されています。有効なプロトコルは、より多くの「コントロール」を与えます。必要に応じて必要なのであれば、委任メソッドを使用する必要はありません。
「優先度」はありません。プロトコルはオプションです。そのため、UICollectionViewFlowLayoutを使用しない場合は、プロトコルを使用しません。