SliderMenuController
创建带有多个固定点的可滑动视图控制器
功能
- 多个固定点
- 全屏支持
- 便于滚动的视图
设置
- 将
pod 'SliderMenuController'
添加到您的Podfile或将SliderMenuController.swift
复制到您的项目中 - 创建一个继承自SliderMenuController的自定义类。
- 使用
addSliderMenu(sliderMenuVC: SliderMenuController, initialStickyPointIndex: Int, animated: Bool)
将您的自定义控制器作为主控制器的子控制器添加
自定义
您可以通过覆盖以下属性来自定义控制器行为
preferredPortraitSize: CGSize
横屏情况下,slider menu controller视图期望的大小,以屏幕单位计。主要用于设置控制器标准宽度。默认值是宽度:
UIScreen.main.bounds.width, height: 400
。
preferredLandscapetSize: CGSize
滑动菜单控制器视图期望的大小,在横向布局中的屏幕单位。主要用于设置控制器的标准宽度。默认值是宽度:
UIScreen.main.bounds.width, 高度: 400
。
stickyPoints: [CGFloat]
包含屏幕单位y值的列表,以滑动菜单控制器坐标系中的值表示。在手势结束时,滑动菜单控制器将滚动到列表中最接近的点。
根据当前设备的方向,此属性从portraitStickyPoints或landscapeStickyPoints中获取。
portraitStickyPoints: [CGFloat]
包含纵向布局屏幕单位y值的列表,以滑动菜单坐标系中的值表示。在手势结束时,滑动菜单控制器将滚动到列表中最接近的点。
landscapeStickyPoints: [CGFloat]
包含横向布局屏幕单位y值的列表,以滑动菜单坐标系中的值表示。在手势结束时,滑动菜单控制器将滚动到列表中最接近的点。
bounceOffset: CGFloat
一个CGFloat值,用于确定滑动菜单控制器视图可以超出其大小的程度。默认值是0,这意味着视图不能超出其大小。
可以通过使用方法moveSliderMenuToPoint(_ stickyPoint: CGFloat, animated: Bool, completion: (() -> Void)?)
程序化地更改视图控制器的视图位置。
此方法将通过移动滑动菜单控制器视图以显示提供的粘点。
您可以使用
stickyPoints
中的项目来提供有效的粘点。
stickyPoint
:要使其可见的y值,以屏幕单位表示,以滑动菜单控制器坐标系中的值。animated
:如果为true,则通过动画移动视图。completion
:动画完成后执行的闭包。此闭包没有返回值,也不接受任何参数。您可以为此参数指定nil。
通过重写以下方法,可以自定义由控制器视图执行的所有动画。 animateSliderMenu(action: Action, withDuration duration: TimeInterval, animations: @escaping () -> Void, completion: ((Bool) -> Void)?)
您可以考虑重写此方法并使用方法
UIView.animate(withDuration:, delay:, usingSpringWithDamping:, initialSpringVelocity:, options:, animations:, completion:)
来自定义动画。
parameter
:即将执行的动作(.addSliderMenu, .removeSliderMenu或.moveSliderMenu)duration
:动画的总持续时间,以秒为单位。如果您指定一个负值或0,则更改将在没有动画的情况下执行。-animations
:包含要提交到视图的更改的块对象。completion
:在动画序列结束时执行的块对象。
可以通过重写以下方法来观察SliderMenuController的视图状态: sliderWillMove(to point: CGFloat)
此方法在滑动菜单控制器视图移动到粘点之前调用。
sliderDidMove(to point: CGFloat)
此方法在滑动菜单控制器视图移动到点之后调用。
sliderDidDrag(to point: CGFloat)
此方法在移动滑动菜单控制器视图到点后调用。
演示
在此存储库中,您还可以找到演示。
来自硅谷森林,波特兰的问候!