KSSwipeStack 0.4.4

KSSwipeStack 0.4.4

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2018 年 5 月
SPM支持 SPM

Kicksort Consulting ABGustav Sundin 维护。




  • Simon Arneson

Kicksort

KSSwipeStack

CI Status Version License Platform

KSSwipeStack 是一个用于 iOS 的轻量级卡片滑动库,用 Swift 编写。

KSSwipeStack 可以处理任何数据模型,滑动卡片的布局设计完全可定制。

利用提供的选择,您可以定制滑动堆栈中的行为和动画。

Example GIF

功能

内置支持

示例

要运行示例项目,请克隆仓库,然后从示例目录运行 pod install

安装

KSSwipeStack 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "KSSwipeStack"

开始使用

创建一个 SwipeView

SwipeView 是滑动堆叠的容器。

  1. SwipeView 添加到您的 Storyboard/nib,并为其创建一个输出端口。

  2. 在使用提供的 setup 方法之一对上述 SwipeView 运行设置。

  • 最简单的形式无需传递任何参数
swipeView.setup()

  • 您还可以使用传递 SwipeOptions 参数作为设置的 setup 方法的设置,以修改堆叠的行为。有关如何使用 SwipeOptions 的更多详细信息,请参阅 选项 部分。
var swipeOptions = SwipeOptions()
swipeOptions.allowVerticalSwipes = true

swipeView.setup(options: swipeOptions)

  • 最后,您可以将一个 SwipeDelegate 引用传递给(如果您不想使用 RxSwift),或者单独传递
swipeView.setup(swipeDelegate: self)

  • ...或者与一些自定义 SwipeOptions 一起传递
swipeView.setup(swipeOptions: swipeOptions, swipeDelegate: self)

创建一个扩展 SwipableView 的自定义类

以适当的方式表示您的数据项。

class ExampleCard: SwipableView {

    override func setData(_ data: SwipableData) {
        super.setData(data)
        backgroundColor = .kicksortGray
        
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: frame.width - 100, height: 200))
        imageView.contentMode = .scaleAspectFit
        imageView.image = #imageLiteral(resourceName: "kicksortLogoInverted")
        imageView.center = center
        addSubview(imageView)
    }
}

创建一个实现协议 SwipableData 的简单数据模型。

该协议只有一个方法,getView,其中您需要返回一个 SwipableView

func getView(with frame: CGRect) -> SwipableView {
    let view = ExampleCard(frame: frame)
    view.setData(self)
    return view
}

向堆栈添加卡片

您可以添加任意数量、任意类型的卡片到同一个堆栈中。通过调用addCard并传入一个实现了SwipableData接口的参数来添加卡片。

swipeView.addCard(ExampleData())

处理滑动操作

使用RxSwift

通过简单地设置观察者,您可以使用RxSwift观察堆栈中所有滑动事件。

swipeView.getSwipes().subscribe(onNext: { (swipe) in
    print("RX SWIPE EVENT")
}, onError: nil, onCompleted: nil, onDisposed: nil).addDisposableTo(disposableBag)

您还可以根据在滑动选项中提供的填充阈值来观察堆栈是否需要填充。

swipeView.needsRefill().subscribe(onNext: { (swipe) in
    print("RX REFILL EVENT")
}, onError: nil, onCompleted: nil, onDisposed: nil).addDisposableTo(disposableBag)

使用SwipeDelegate

在设置SwipeView时,您可以为接收到的堆栈滑动操作提供实现SwipeDelegate的类。

swipeView.setup(options: SwipeOptions(), swipeDelegate: self)

extension ViewController: SwipeDelegate {
    func onNext(_ swipe: Swipe) {
        dump("DELEGATE SWIPE EVENT")
    }
}

附加功能

撤销滑动操作

调用 undoSwipe() 方法,可以将最新滑过的卡片移动到栈中。您可以多次调用该方法,以便在滑动历史中回退更多步骤。注意,可以通过将 SwipeOptions 中的 allowUndo 设置为 false 来禁用此功能。

swipeView.undoSwipe()

如果您想防止特定的卡片被添加到滑动历史(因此在调用 undoSwipe() 时被跳过),您应该为该 SwipableView 重写 isUndoable() 并返回 false。

选项

使用 SwipeOptions 结构体可以修改滑动栈的行为。

public struct SwipeOptions {
    public var throwingThreshold = Float(800)
    public var snapDuration = 0.1
    public var allowHorizontalSwipes = true
    public var allowVerticalSwipes = false
    public var horizontalPanThreshold = CGFloat(0.5)
    public var verticalPanThreshold = CGFloat(0.5)
    public var visibleImageOrigin = CGPoint(x: 0, y: 0)
    public var allowUndo = true
    public var maxRenderedCards = 5
    public var refillThreshold = 10
    public var dismissAnimationDuration = 0.25
    public var freezeWhenDismissing = false
    
    public init(){}
}

指定需要投掷卡片多“硬”才能将其删除。

public var throwingThreshold = Float(800)

回弹动画的持续时间。

public var snapDuration = 0.1

使滑动栈对水平滑动做出响应。

public var allowHorizontalSwipe = true

使滑动层对垂直滑动做出响应。

public var allowVerticalSwipe = false

卡片释放时删除卡片的 X 轴阈值。

public var horizontalPanThreshold = CGFloat(0.5)

卡片在“原始”状态下的位置。

public var visibleImageOrigin = CGPoint(x: 0, y: 0)

允许撤销滑动。

public var allowUndo = true

SwipeView 同时渲染的卡片数量。

public var maxRenderedCards = 5

发送填充事件到填充订阅者的阈值。

public var refillThreshold = 10

删除动画的持续时间。

public var dismissAnimationDuration = 0.25

可选地,在删除卡片后选择冻结栈以防止用户滑动。

public var freezeWhenDismissing = false

作者

arneson,Simon Arneson,[email protected]

Sundin,Gustav Sundin,[email protected]

许可

KSSwipeStack 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。