杨锴
2025-04-16 09a372bc45fde16fd42257ab6f78b8deeecf720b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//
//  FFPageViewController.h
//  FFPage
//
//  Created by North on 2019/8/5.
//  Copyright © 2019 North. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
//滚动方向
typedef NS_ENUM(NSUInteger, ScrollDirection) {
    ScrollDirectionHorizontal = 0, //横向滚动 默认
    ScrollDirectionVertical        //纵向滚动
};
 
@class FFPageViewController;
 
@protocol FFPageViewControllerDelegate <NSObject>
 
@required
 
/**
 控制器总数量
 
 @param pageViewConteoller pageViewConteoller
 @return 数量
 */
- (NSUInteger)totalPagesOfpageViewController:(FFPageViewController *_Nonnull)pageViewConteoller;
 
/**
 返回页码对应控制器
 
 @param pageViewConteoller pageViewConteoller
 @param page 页码
 @return 控制器
 */
- (UIViewController *_Nonnull)pageViewController:(FFPageViewController *_Nonnull)pageViewConteoller                             controllerForPage:(NSInteger)page;
 
@optional
 
/**
 控制器页面改变
 
 @param pageViewController pageViewController
 @param currentPage 当前页码
 */
- (void)pageViewController:(FFPageViewController *_Nonnull)pageViewController
        currentPageChanged:(NSInteger)currentPage;
 
 
/**
 滚动视图偏移量改变
 
 @param pageViewController pageViewController
 @param contentOffset 偏移量
 */
- (void)pageViewController:(FFPageViewController *_Nonnull)pageViewController
        contentOffSetChanged:(CGPoint)contentOffset;
 
 
 
@end
 
@interface FFPageViewController : UIViewController
 
/**
 代理
 */
@property (nonatomic, weak, nullable) id<FFPageViewControllerDelegate> delegate;
 
/**
 滚动方向
 */
@property (assign, nonatomic) ScrollDirection scrollDirection;
 
/**
 前/后预加载页数  总加载页数 = 2 * prePages + 1
 */
@property (assign, nonatomic) NSUInteger prePages;
 
/**
 同时存在的控制器最大数量 超过这个数量 不常用的控制器将会被释放
 如果不设置值,默认不释放控制器
 如果设置值,应当大于 2 * prePages + 1
 */
@property (assign, nonatomic) NSUInteger maxPages;
 
/**
 默认显示页数
 */
@property(assign, nonatomic ) NSInteger defaultPage;
 
/**
 滚动容器
 */
@property(readonly, nonatomic) UIScrollView * _Nonnull scrollview;
 
/**
 当前页数
 */
@property(assign, nonatomic, readonly) NSInteger currentPage;
 
/**
 当前控制器
 */
@property(weak, nonatomic, readonly) UIViewController * _Nullable currentController;
 
/**
 滚动到第几页
 
 @param page 需要滚动的页数
 @param animation 是否动画
 */
- (void)scrollToPage:(NSInteger)page animation:(BOOL)animation;
 
/**
 刷新数据
 */
- (void)reloadData;
 
/**
 更新总数,不会对正在显示的控制器产生影响
 */
- (void)updateTotalCount;
 
@end