PositionScrollView 1.0.2

PositionScrollView 1.0.2

kazuooooo 维护。



  • 作者

License: MIT Twitter: @kazuwombat

PositionScrollView

アセット 2@3x

Position Scroll View 是一个纯 Swift UI Scroll View,可以获取或移动滚动位置。

特性

  • 获取滚动位置的滚动位置
  • 垂直,水平,二维滚动
  • 通过代码移动滚动位置
  • 使页面滚动页面边缘粘性或滚动结束后跟随动量。

要求

  • Xcode 11.6+
  • Swift 5.2+

安装

在 Xcode 的 Swift Package 管理器选项卡中为 SwiftPackageManager 添加 url

CocoaPods

pod ‘PositionScrollView’ 

用法

PositionScrollView将整个目标视图划分为页面和单位,以便于处理滚动位置。 组38

您可以在每个范围内获取/设置位置。 组41

以下是一个最小水平滚动视图的示例。

import Foundation
import SwiftUI

/// Extended ScrollView which can controll position
public struct MinimalHorizontalExample: View, PositionScrollViewDelegate {
    /// Page size of Scroll
    var pageSize = CGSize(width: 200, height: 300)
    
    // Create PositionScrollViewModel
    // (Need to create in parent view to bind the state between this view and PositionScrollView)
    @ObservedObject var psViewModel = PositionScrollViewModel(
        pageSize: CGSize(width: 200, height: 300),
        horizontalScroll: Scroll(
            scrollSetting: ScrollSetting(pageCount: 5, afterMoveType: .stickNearestUnitEdge),
            pageLength: 200 // Page length of direction
        )
    )
   
    public var body: some View {
        return VStack {
            PositionScrollView(
                viewModel: self.psViewModel,
                delegate: self
            ) {
                HStack(spacing: 0) {
                    ForEach(0...4, id: \.self){ i in
                        ZStack {
                            Rectangle()
                                .fill(BLUES[i])
                                .border(Color.black)
                                .frame(
                                    width: self.pageSize.width, height: self.pageSize.height
                            )
                            Text("Page\(i)")
                                .foregroundColor(Color.white)
                                .font(.system(size: 24, weight: .heavy, design: .default))
                        }
                    }
                    
                }
            }
			  // Get page via scroll object
            Text("page: \(self.psViewModel.horizontalScroll?.page ?? 0)")
			  // Get position via scroll object
            Text("position: \(self.psViewModel.horizontalScroll?.position ?? 0)")
        }
    }
    
    struct SampleView_Previews: PreviewProvider {
        static var previews: some View {
            return MinimalHorizontalExample()
        }
    }
    
    // Delegate methods of PositionScrollView
	  // You can monitor changes of position
    public func onScrollStart() {
        print("onScrollStart")
    }
    public func onChangePage(page: Int) {
        print("onChangePage to page: \(page)")
    }
    
    public func onChangePosition(position: CGFloat) {
        print("position: \(position)")
    }
    
    public func onScrollEnd() {
        print("onScrollEnd")
    }
}

API详情

滚动设置

设置变量

变量名 类型 默认值 详情
pageCount* Int - 页面数量
initialPage Int 0 初始页面
unitCountInPage Int 1 每页单位数量
afterMoveType 滚动结束后行为 .stickToNearestUnitEdge 滚动结束后移动的行为
stickToNearestUnitEdge: 粘靠到最近的单位边缘
momentum: 直到惯性消失。
scrollSpeedToDetect Double 30 检测滚动速度

滚动

变量

变量名 类型 详情
position CGFloat 基于页面0起始位置的位置
page Int 当前页面
pageInPosition CGFloat 基于页面起始位置的当前位置
unit Int 页面中的当前单位
positionInUnit CGFloat 基于单位起始位置的当前位置

函数

函数名 参数 详情
moveBy value: CGFloat 按参数值移动滚动
moveTo position: CGFloat 将滚动移动到参数位置
moveToPage page: Int
unit: Int = 0
positionInUnit: CGFloat = 0
将滚动移动到参数页

PositionScrollViewDelegate

函数名 参数 详情
onScrollStart - 滚动开始时调用
onChangePosition position: CGFloat 位置改变时调用
onChangePage page: Int 页面改变时调用
onChangeUnit unit: Int 单位改变时调用
onChangePositionInPage positionInPage: CGFloat 页面内位置改变时调用
onChangePositionInUnit positionInUnit: CGFloat 单位内位置改变时调用
onScrollEnd - 滚动结束时调用

联系,作者

请随时联系我。 kazuooooo

公司