Releases: rechsteiner/Parchment
v1.0.0
This release introduces a lot of breaking changes, a bunch of new features and a couple of bug fixes. Here are the most notable changes, with a full list of changes below:
Removed PagingOptions
initializer #98
All configuration is now moved into properties on the PagingViewController
class. You no longer have to initialize a PagingViewController
with an instance conforming to the PagingOptions
protocol. This reduces the boilerplate of having to create a separate options struct when you just need to override a single value. It also means you can change the options after the PagingViewController
has been initialized. All the properties on the PagingTheme
protocol has also moved into separate properties on PagingViewController
.
Before:
struct Theme: PagingTheme {
let textColor: UIColor = .red
}
struct Options: PagingOptions {
let theme: PagingTheme = Theme()
let menuItemSize: PagingMenuItemSize = .fixed(width: 100, height: 40)
}
let pagingViewController = PagingViewController(options: Options())
After:
let pagingViewController = PagingViewController()
pagingViewController.menuItemSize = .fixed(width: 100, height: 40)
pagingViewController.textColor = .red
Renamed data source #99
The current data source protocol has been renamed to PagingViewControllerInfiniteDataSource
and moved into the property called infiniteDataSource
.
Added new data source #99
A new PagingViewControllerDataSource
protocol has been added that makes it easier to set up a custom data source if you have a fixed number of view controllers. To use the new data source, you only need to return the total number of
view controllers as well as the view controller and PagingItem
for a given index. The new data source replaces the existing dataSource
property.
Example:
extension ViewController: PagingViewControllerDataSource {
func numberOfViewControllers<T>(in: PagingViewController<T>) -> Int {
return items.count
}
func pagingViewController<T>(_ pagingViewController: PagingViewController<T>, viewControllerForIndex index: Int) -> UIViewController {
return ItemViewController(item: items[index])
}
func pagingViewController<T>(_ pagingViewController: PagingViewController<T>, pagingItemForIndex index: Int) -> T {
return items[index] as! T
}
}
...
pagingViewController.dataSource = self
Updated delegate protocol #100
Three new delegate methods have been added to the PagingViewControllerDelegate
protocol. You can now be notified before, during and after the user navigates to another view controller:
protocol PagingViewControllerDelegate: class {
func pagingViewController<T>(
_ pagingViewController: PagingViewController<T>,
isScrollingFromItem currentPagingItem: T,
toItem upcomingPagingItem: T?,
startingViewController: UIViewController,
destinationViewController: UIViewController?,
progress: CGFloat)
func pagingViewController<T>(
_ pagingViewController: PagingViewController<T>,
willScrollToItem pagingItem: T,
startingViewController: UIViewController,
destinationViewController: UIViewController)
func pagingViewController<T>(
_ pagingViewController: PagingViewController<T>,
didScrollToItem pagingItem: T,
startingViewController: UIViewController?,
destinationViewController: UIViewController,
transitionSuccessful: Bool)
func pagingViewController<T>(
_ pagingViewController: PagingViewController<T>,
widthForPagingItem pagingItem: T,
isSelected: Bool) -> CGFloat?
}
The widthForPagingItem:
delegate has been changed to return CGFloat?
instead of CGFloat
(See: #100). The default implementation will return nil.
Removed FixedPagingViewControllerDelegate
protocol #100
The FixedPagingViewControllerDelegate
protocol is replaced by the PagingViewControllerDelegate
protocol. The new delegate does not include the index for the paging items, but you can get the current index from the PagingIndexItem
like this:
extension ViewController: PagingViewControllerDelegate {
func pagingViewController<T>(_ pagingViewController: PagingViewController<T>, didScrollToItem pagingItem: T, startingViewController: UIViewController?, destinationViewController: UIViewController, transitionSuccessful: Bool) {
if let indexItem = pagingItem as? PagingIndexItem {
print("index: ", indexItem.index)
}
}
}
Added
- Add option to always center selected menu item #101
- Allow subclassing the collection view layout #104
- Add empty implementations of collection view delegate methods (4840483)
- Add option to disable content interaction #113
- Add option for selected background color #114
- Add method for selecting paging items based on index #117
Changed
- Rename selectPagingItem to select(pagingItem:) #105
- Make PagingState property public #107
- Make PagingItems struct public #108
- Make PagingState extension properties public (f842a7b)
- Make indicator layout attributes open to allow subclassing (7c35acc)
- Change collection view delegate methods to open (68b125b)
- Replace PagingTheme with PagingOptions #111
- Rename
headerBackgroundColor
tomenuBackgroundColor
#116
Fixes
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
Add support for scrolling in header #48
- Require
PagingItem
to conform toHashable
andComparable
: fbd7aff - Write custom collection view layout instead of using
UICollectionViewFlowLayout
c6f78b4
Note: With this change, Parchment requires PagingItem
to
conform to both Hashable
and Comparable
. This means any
existing PagingItem
implementation have to be updated.
v0.4.0
v0.3.0
v0.2.0
- Add progress value to menu items: #20
- Scroll menu items alongside content: #22
- Option to add spacing to indicator: #27 Thanks @AYastrebov 🙌