DisplaySwitcher 2.0

DisplaySwitcher 2.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2020年4月
SPM支持 SPM

Yalantis 维护。




Display Switcher

CocoaPods Compatible Platform License Yalantis

此组件实现了两个集合视图布局之间的自定义转换,具有自定义动画持续时间。

Preview

查看此 dribbble 上的项目

同时,在 我们的博客 中了解其制作过程。

需求

  • iOS 10.0+
  • Xcode 11
  • Swift 5

安装

CocoaPods

use_frameworks!
pod ‘DisplaySwitcher’, '~> 2.0’

Carthage

github "Yalantis/DisplaySwitcher" "master"

使用方法

首先,导入DisplaySwitcher

import DisplaySwitcher

然后创建两个布局(列表模式和网格模式)

private lazy var listLayout = DisplaySwitchLayout(staticCellHeight: listLayoutStaticCellHeight, nextLayoutStaticCellHeight: gridLayoutStaticCellHeight, layoutState: .list)

private lazy var gridLayout = DisplaySwitchLayout(staticCellHeight: gridLayoutStaticCellHeight, nextLayoutStaticCellHeight: listLayoutStaticCellHeight, layoutState: .grid)

设置当前布局

private var layoutState: LayoutState = .list
collectionView.collectionViewLayout = listLayout

然后重写两个UICollectionViewDataSource方法

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    // count of items
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    // configure your custom cell
}

并且重写一个UICollectionViewDelegate方法(用于自定义布局过渡)

func collectionView(collectionView: UICollectionView, transitionLayoutForOldLayout fromLayout: UICollectionViewLayout, newLayout toLayout: UICollectionViewLayout) -> UICollectionViewTransitionLayout {
    let customTransitionLayout = TransitionLayout(currentLayout: fromLayout, nextLayout: toLayout)
    return customTransitionLayout
}

最后创建必要的过渡并启动它(您可以简单地更改过渡布局和旋转按钮的动画持续时间)

let transitionManager: TransitionManager
if layoutState == .list {
    layoutState = .grid
    transitionManager = TransitionManager(duration: animationDuration, collectionView: collectionView!, destinationLayout: gridLayout, layoutState: layoutState)
} else {
    layoutState = .list
    transitionManager = TransitionManager(duration: animationDuration, collectionView: collectionView!, destinationLayout: listLayout, layoutState: layoutState)
}
transitionManager.startInteractiveTransition()
rotationButton.selected = layoutState == .list
rotationButton.animationDuration = animationDuration

祝您玩得开心! :)

让我们知道!

如果您共享您使用我们组件的项目链接,我们会非常高兴。只需发送电子邮件到[email protected],并且如果您对动画有任何疑问或建议,请告诉我们。

附言。我们将发布更多令人惊叹的代码包装,并发布关于如何制作优于iOS(Android)UI的教程。敬请关注!

许可证

MIT许可(MIT)

版权所有 © 2017 Yalantis

任何得到本软件及相关文档副本的人(“软件”)都可以免费使用该软件,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售软件副本,并允许向提供软件的个人提供这样做,但需遵守以下条件

上述版权声明和许可声明应包含在软件的所有副本或实质性部分中。

本软件按“现状”提供,不提供任何类型的保证,明示或暗示,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有者不对任何索赔、损害或其他责任承担责任,无论因合同行为、侵权行为或其他行为而引起,包括与软件或其使用或其他行为有关的索赔、损害或其他责任。