All Projects → jindulys → Chainpagecollectionview

jindulys / Chainpagecollectionview

Licence: mit
A custom View with fancy collectionView animation

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to Chainpagecollectionview

Containercontroller
UI Component. This is a copy swipe-panel from app: Apple Maps, Stocks. Swift version
Stars: ✭ 273 (-64.08%)
Mutual labels:  collectionview
Bubblepictures
Bubble Pictures for iOS done in Swift
Stars: ✭ 434 (-42.89%)
Mutual labels:  collectionview
Datasources
💾 🔜📱 Type-safe data-driven CollectionView, TableView Framework. (We can also use ASCollectionNode)
Stars: ✭ 553 (-27.24%)
Mutual labels:  collectionview
Rskcollectionviewretractablefirstitemlayout
A light-weight UICollectionViewFlowLayout subclass that allows the first item to be retractable.
Stars: ✭ 281 (-63.03%)
Mutual labels:  collectionview
Ehhorizontalselectionview
Horizontal table view style controller
Stars: ✭ 346 (-54.47%)
Mutual labels:  collectionview
Kddraganddropcollectionview
This component allows for the transfer of data items between collection views through drag and drop
Stars: ✭ 476 (-37.37%)
Mutual labels:  collectionview
Mspeekcollectionviewdelegateimplementation
A custom paging behavior that peeks the previous and next items in a collection view
Stars: ✭ 265 (-65.13%)
Mutual labels:  collectionview
Cardslayout
⭐️ Custom card-designed CollectionView layout
Stars: ✭ 686 (-9.74%)
Mutual labels:  collectionview
Bouncylayout
Make. It. Bounce.
Stars: ✭ 4,035 (+430.92%)
Mutual labels:  collectionview
Koloda
KolodaView is a class designed to simplify the implementation of Tinder like cards on iOS.
Stars: ✭ 4,998 (+557.63%)
Mutual labels:  collectionview
Hfcardcollectionviewlayout
The HFCardCollectionViewLayout provides a card stack layout not quite similar like the apps Reminder and Wallet.
Stars: ✭ 281 (-63.03%)
Mutual labels:  collectionview
Compositional Layouts Kit
📏 A set of advanced compositional layouts for UICollectionView with examples [Swift 5.3, iOS 13].
Stars: ✭ 317 (-58.29%)
Mutual labels:  collectionview
Carlenscollectionviewlayout
An easy-to-use Collection View Layout for card-like animation.
Stars: ✭ 478 (-37.11%)
Mutual labels:  collectionview
Fapaginationlayout
Collection view pagination layout
Stars: ✭ 276 (-63.68%)
Mutual labels:  collectionview
Jxcategoryview
A powerful and easy to use category view (segmentedcontrol, segmentview, pagingview, pagerview, pagecontrol) (腾讯新闻、今日头条、QQ音乐、网易云音乐、京东、爱奇艺、腾讯视频、淘宝、天猫、简书、微博等所有主流APP分类切换滚动视图)
Stars: ✭ 5,561 (+631.71%)
Mutual labels:  collectionview
Jzcalendarweekview
Calendar Week & Day View in iOS Swift
Stars: ✭ 272 (-64.21%)
Mutual labels:  collectionview
Hjcarouseldemo
Stars: ✭ 437 (-42.5%)
Mutual labels:  collectionview
Tysnapshotscroll
一句代码保存截图,将 UIScrollView UITableView UICollectionView UIWebView WKWebView 网页 保存 为 长图 查看。Save the scroll view page as an image,support UIScrollView,UITableView,UICollectionView,UIWebView,WKWebView.(Support iOS13)
Stars: ✭ 709 (-6.71%)
Mutual labels:  collectionview
Diffabledatasources
💾 A library for backporting UITableView/UICollectionViewDiffableDataSource.
Stars: ✭ 601 (-20.92%)
Mutual labels:  collectionview
Collection View Layouts
A library that implements custom flow layouts for iOS apps
Stars: ✭ 491 (-35.39%)
Mutual labels:  collectionview

ChainPageCollectionView

A custom View with two level chained collection views and fancy transition animation.

Demo

Demo Demo

Requirements

  • iOS 9.0+
  • Xcode 8

Installation

CocoaPods

Update your Podfile to include the following:

pod 'ChainPageCollectionView', '~> 1.0'

Run pod install.

NOTE: If you can not find the pod target. Please follow: https://stackoverflow.com/questions/31065447/no-such-module-when-i-use-cocoapods to build your pod target.

Carthage

To integrate ChainPageCollectionView with Carthage, specify it in your Cartfile

github "jindulys/ChainPageCollectionView" ~> 1.0

Then, run the following command to build ChainPageCollectionView framework

$ carthage update

At last, you need to set up your Xcode project manually to add ChainPageCollectionView framework.

On your application targets’ General settings tab, in the Linked Frameworks and Libraries section, drag and drop each framework you want to use from the Carthage/Build folder on disk.

On your application targets’ Build Phases settings tab, click the + icon and choose New Run Script Phase. Create a Run Script with the following content:

/usr/local/bin/carthage copy-frameworks

and add the paths to the frameworks you want to use under Input Files:

$(SRCROOT)/Carthage/Build/iOS/ChainPageCollectionView.framework

Check Carthage if you need more help.

Usage

Basic Usage

import ChainPageCollectionView
  1. Create ChainPageCollectionView
// chainView is this view controller's property.
chainView = ChainPageCollectionView(viewType: .normal)
chainView.delegate = self
  1. Register cell for parentCollectionView and childCollectionView
chainView.parentCollectionView.register(#cellType, forCellWithReuseIdentifier:#cellIdentifier)
chainView.childCollectionView.register(#cellType, forCellWithReuseIdentifier:#cellIdentifier)
  1. Implement ChainPageCollectionViewProtocol
func parentCollectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  // return your parent data source count.
}

func parenCollectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  // Dequeue and configure your parent collectionview cell
}

func childCollectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  // return your child data source count.
}

func childCollectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  // Dequeue and configure your child collectionview cell
}
  1. Update child collection view data source when parent index has changed.
// You will get notified by following protocol method.
func childCollectionView(_ collectionView: UICollectionView, parentCollectionViewIndex: Int) {
  // When parent collection view's scroll stops, this will get called with new parent collectionview's index.
  // You can use this message to fetch related child collection view's new data.
  
  // Once you have the latest child collection view's data, set `childCollectionViewDataReady` to `true`.
  // NOTE: This is important to be set, otherwise your child collection view propably will not show up again.
  chainView.childCollectionViewDataReady = true
}

Customization

Child Collection View Animation Type

For now ChainPageCollectionView support two types of child collection view transition animation.

public enum ChainPageChildAnimationType {
  case slideOutSlideIn
  case shrinkOutExpandIn
}

Default is slideOutSlideIn, you can set it via initialization stage.

let chainView = ChainPageCollectionView(viewType: .normal, 
                                        childAnimationType: #yourchoice)

Layout

You can customize the layout objects by passing them via ChainPageCollectionView's designated initializer.

let chainView = ChainPageCollectionView(viewType: .normal, 
                                        parentColectionViewLayout: #yourlayout, 
                                        childCollectionViewLayout: #yourlayout)

ItemSize

You can use parentCollectionViewItemSize and childCollectionViewItemSize to set related layouts' itemSize.

Screen Ratio

The default behaviour of this view is that parent collection view takes 3/4 height of this view and child collection view takes the rest. You can set viewType to a customized ratio with type customParentHeight(#SomeInt, #SomeInt)

let chainView = ChainPageCollectionView(viewType: .customParentHeight(28, 12))

Author

Yansong Li ( [email protected] ), wechat: jindulys_uw

License

Expanding collection is released under the MIT license. See LICENSE for details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].