UICollectionViewLayout を使用して、Pinterest の列レイアウトに似たインターフェイスを作成する方法について、誰かが正しい方向に向けることができますか?
ネットで調べてみたのですが、まだあまり例がないようです。
UICollectionViewLayout を使用して、Pinterest の列レイアウトに似たインターフェイスを作成する方法について、誰かが正しい方向に向けることができますか?
ネットで調べてみたのですが、まだあまり例がないようです。
1000memories の "Quilt" ビューは pinterest のようなオープン ソースです: http://blog.1000memories.com/168-opensourcing-quilt。
より概念的な概要を探している場合は、何をしたいのかについての基本的な考え方を次に示します。Pinterest スタイルのレイアウトだけが必要な場合、最も簡単なのは をサブクラス化することUICollectionViewFlowLayout
です。このクラスから多くのレイアウトのヘルプが得られ、Pinterest スタイルはその機能の範囲内です。1 つのメソッドをオーバーライドするだけで済みます。
UICollectionViewFlow レイアウトを使用して、通常の UICollectionView をセットアップします。これを行う簡単な方法は次のとおりです。
(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
(NSInteteger)collectionView:numberOfItemsInSection:
(UICollectionViewCell *)collectionView:cellForItemAtIndexPath:
dequeueReusableCellWithReuseIdentifier:forIndexPath:
のは、インデックス パスを指定して呼び出すことだけです。UIImageView またはいくつかのラベルをセルに追加した場合、これは実際に画像やテキストなどを割り当てるのに最適な場所です。viewController でviewDidLoad
a をインスタンス化しUICollectionViewFlowLayout
、UICollectionView のデータソースを自分のものに、レイアウトを flowlayout に設定します。このクラスは のサブクラスですUICollectionViewViewController
。
self.collectionView.dataSource = [[YourDataSource alloc] init];
self.collectionView.collectionViewLayout = [[UICollectionViewFlowLayout alloc] init];
Ok。この時点で、アプリを実行して画面に何かを表示できるはずです。これは旋風の概要です。ViewController の設定方法などの詳細が必要な場合は、それに関する情報がたくさんあります。
ここからがフロー レイアウトの Pinterest 化という重要な部分です。
まず、UIViewControllerFlowLayout のサブクラスである新しいクラスを追加します。ViewControllerviewDidLoad
を変更してこのクラスをインスタンス化し、 として割り当てUICollectionView
ますcollectionViewLayout
。
実装する必要があるメソッドは- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
.
つまり、スーパークラスがほとんどすべての作業を行います。コードは次のようになります。
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
[attributes enumerateObjectsUsingBlock:^(id attr, NSUInteger idx, BOOL *stop) {
float newYCoord = [calculationMethodYouHaveToWriteFor:attr.frame];
attr.frame = CGRectMake(attr.frame.origin.x, newYCoord, attr.size.width, attr.size.height];
}];
}
Pinterest は固定幅の列を使用します。計算方法で行う必要があるのは、現在の列 (`attr.origin.x / _columnWidth) を把握し、ivar からその列の合計の高さを調べることだけです。それを新しいオブジェクトの高さに追加し、次のパスのために保存し直すことを忘れないでください。
フロー レイアウト スーパークラスは、セルの作成、表示されるセルの決定、コンテンツ サイズの把握、x 方向の行の配置の把握、セルへのインデックス パスの割り当てを処理します。がらくたがたくさん。そして、その 1 つのメソッドをオーバーライドすることで、y-pos を好きなようにいじることができます。
githubから2つあります
https://github.com/jayslu/JSPintDemo
https://github.com/chiahsien/UICollectionViewWaterfallLayout
現在、プロジェクトでWaterfallの修正バージョンを使用しており、JSPintを調査しています。
個人的なプロジェクトで使用するカスタム uicollectionviewlayout を作成しました。ここにリンクがあります。それが役に立てば幸い。