Skip to content

Commit 6ee60c3

Browse files
authored
Merge pull request #1 from 12207480/master
Get new information
2 parents 4e83006 + 252c05d commit 6ee60c3

71 files changed

Lines changed: 4911 additions & 2054 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 145 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
1-
# TYPagerController
2-
page View controller,simple,high custom,and have tabBar styles.<br>
3-
TYPagerController 简单,支持定制,页面控制器,可以滚动内容和标题栏,包含多种style
4-
5-
* TYPagerController 水平滚动页面控制器,不包含任何其他的控件(TabBar),contentTopEdging 为距离top的高度。
6-
* TYTabPagerController 包含TabBar(我帮你创建了Tabbar),contentTopEdging为TabBar的高度,调用registerCellClass 注册cell(遵守TYTabTitleCellProtocol),然后在代理方法里改变cell。
7-
* TYTabButtonPagerController 同上,默认注册了TYTabTitleViewCell
1+
# TYPagerController v2.0
2+
TYPagerController 简单,强大,高度定制,页面控制器,水平滚动内容和标题栏,包含多种barStyle。<br>
3+
TYPagerController v2.0 重构优化代码,分离出TYPagerViewLayout布局类,添加更多功能,更加强大。<br>
4+
如果还想使用以前的版本可以查看分支v1.0.6 和 pod 'TYPagerController', '~> 1.0.6' <br>
5+
6+
* TYPagerViewLayout 水平滚动页面的layout类,只需要initWithScrollView:即可实现水平滚动页面.
7+
* TYPagerView 包含TYPagerViewLayout的水平滚动页面View
8+
* TYPagerController 包含TYPagerViewLayout的水平滚动页面Controller。
9+
* TYTabPagerBar Pager的标题 tabBar
10+
* TYTabPagerView 包含TabBar的TYPagerView
11+
* TYTabPagerController 包含TabBar的TYPagerController
812

913
更详细的使用请看[LovePlayNews](https://github.com/12207480/LovePlayNews)项目
1014

1115
## CocoaPods
1216
```
13-
pod 'TYPagerController'
17+
pod 'TYPagerController' , '~> 2.0.1'
1418
```
1519

1620
## Requirements
17-
* Xcode 5 or higher
18-
* iOS 6.0 or higher
21+
* Xcode 7 or higher
22+
* iOS 7.0 or higher
1923
* ARC
2024

2125
## ScreenShot
22-
####TYPagerBarStyle
26+
### TYPagerBarStyle
2327

2428
New TYPagerBarStyleProgressElasticView<br>
2529
![image](https://github.com/12207480/TYPagerController/blob/master/ScreenShot/TYPagerController6.gif)
@@ -32,42 +36,82 @@ New TYPagerBarStyleProgressElasticView<br>
3236

3337
3 TYPagerBarStyleCoverView<br>
3438
![image](https://raw.githubusercontent.com/12207480/TYPagerController/master/ScreenShot/TYPagerController3.gif)
39+
![image](https://raw.githubusercontent.com/12207480/TYPagerController/master/ScreenShot/TYPagerController7.gif)
3540

3641
4 TYPagerBarStyleNoneView<br>
3742
![image](https://raw.githubusercontent.com/12207480/TYPagerController/master/ScreenShot/TYPagerController4.gif)
3843

39-
![image](https://raw.githubusercontent.com/12207480/TYPagerController/master/ScreenShot/TYPagerController5.gif)
40-
41-
## Datasource and delegate
44+
## API
4245

46+
### Class
47+
* TYPagerViewLayout
4348
```objc
44-
@protocol TYPagerControllerDataSource <NSObject>
49+
@interface TYPagerViewLayout<__covariant ItemType> : NSObject
4550

46-
// viewController count in pagerController
47-
- (NSInteger)numberOfControllersInPagerController;
51+
@property (nonatomic, weak, nullable) id<TYPagerViewLayoutDataSource> dataSource;
52+
@property (nonatomic, weak, nullable) id<TYPagerViewLayoutDelegate> delegate;
4853

49-
// viewController at index in pagerController
50-
- (UIViewController *)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index;
54+
// strong,will control the delegate,don't set delegate on other place.
55+
@property (nonatomic, strong, readonly) UIScrollView *scrollView;
56+
// if viewcontroller's automaticallyAdjustsScrollViewInsets YES ,will cause frame problems, you can set YES, default YES
57+
@property (nonatomic, assign) BOOL adjustScrollViewInset;
5158

52-
@optional
59+
@property (nonatomic, assign, readonly) NSInteger countOfPagerItems;
60+
@property (nonatomic, assign, readonly) NSInteger curIndex;// default -1
5361

54-
// viewController title in pagerController
55-
- (NSString *)pagerController:(TYPagerController *)pagerController titleForIndex:(NSInteger)index;
62+
@property (nonatomic, strong, readonly) NSCache<NSNumber *,ItemType> *memoryCache;; // will cache pagerView,you can set countLimit
63+
@property (nonatomic, assign) BOOL autoMemoryCache; // default YES
5664

57-
@end
65+
@property (nonatomic, assign) NSInteger prefetchItemCount;// preload left and right item's count , default 0
66+
67+
@property (nonatomic, assign, readonly) NSRange prefetchRange;
68+
@property (nonatomic, assign, readonly) NSRange visibleRange;
69+
70+
@property (nonatomic, strong, nullable, readonly) NSArray<NSNumber *> * visibleIndexs;
71+
@property (nonatomic, strong, nullable, readonly) NSArray<ItemType> * visibleItems;
72+
73+
// default YES, if NO,will not call delegate transitionFromIndex:toIndex:progress:,but will call transitionFromIndex:toIndex:
74+
@property (nonatomic, assign) BOOL progressAnimateEnabel;
75+
76+
// default NO, when scroll visible range change will add item.If YES add item only when scroll animate end, suggest set prefetchItemCount 1 or more
77+
@property (nonatomic, assign) BOOL addVisibleItemOnlyWhenScrollAnimatedEnd;
78+
79+
// default 0.5,when scroll progress percent will change index, only progressAnimateEnabel is NO or don't implement delegate transitionFromIndex: toIndex: progress:
80+
@property (nonatomic, assign) CGFloat changeIndexWhenScrollProgress;
5881
```
82+
* TYPagerView
5983
```objc
60-
@protocol TYPagerControllerDelegate <NSObject>
84+
@interface TYPagerView : UIView
6185
62-
@optional
86+
@property (nonatomic, weak, nullable) id<TYPagerViewDataSource> dataSource;
87+
@property (nonatomic, weak, nullable) id<TYPagerViewDelegate> delegate;
88+
// pagerView's layout,don't set layout's dataSource to other
89+
@property (nonatomic, strong, readonly) TYPagerViewLayout<UIView *> *layout;
90+
@property (nonatomic, strong, readonly) UIScrollView *scrollView;
6391
64-
// transition from index to index with animated
65-
- (void)pagerController:(TYPagerController *)pagerController transitionFromIndex:(NSInteger)formIndex toIndex:(NSInteger)toIndex animated:(BOOL)animated;
92+
@property (nonatomic, assign, readonly) NSInteger countOfPagerViews;
93+
@property (nonatomic, assign, readonly) NSInteger curIndex;// default -1
6694
67-
// transition from index to index with progress
68-
- (void)pagerController:(TYPagerController *)pagerController transitionFromIndex:(NSInteger)formIndex toIndex:(NSInteger)toIndex progress:(CGFloat)progress;
95+
@property (nonatomic, assign, nullable, readonly) NSArray<UIView *> *visibleViews;
6996
70-
@end
97+
@property (nonatomic, assign) UIEdgeInsets contentInset;
98+
99+
//if not visible, prefecth, cache view at index, return nil
100+
- (UIView *_Nullable)viewForIndex:(NSInteger)index;
101+
102+
// register && dequeue's usage like tableView
103+
- (void)registerClass:(Class)Class forViewWithReuseIdentifier:(NSString *)identifier;
104+
- (void)registerNib:(UINib *)nib forViewWithReuseIdentifier:(NSString *)identifier;
105+
- (UIView *)dequeueReusableViewWithReuseIdentifier:(NSString *)identifier forIndex:(NSInteger)index;
106+
107+
// scroll to index
108+
- (void)scrollToViewAtIndex:(NSInteger)index animate:(BOOL)animate;
109+
110+
// update data and layout,but don't reset propertys(curIndex,visibleDatas,prefechDatas)
111+
- (void)updateData;
112+
113+
// reload data and reset propertys
114+
- (void)reloadData;
71115
```
72116
```objc
73117
@protocol TYTabPagerControllerDelegate <TYPagerControllerDelegate>
@@ -83,102 +127,95 @@ New TYPagerBarStyleProgressElasticView<br>
83127

84128
@end
85129
```
86-
##Usage Demo
130+
* TYPagerController
131+
```objc
132+
@interface TYPagerController : UIViewController
87133
88-
if you want to add coustom TabBar, you can inherit TYPagerController,and set contentTopEdging,else you can inherit TYTabPagerController or TYTabButtonPagerController,set contentTopEdging(TabBar height) and custom cell(conform TYTabTitleCellProtocol), call registerCellClass, change cell on delegate.<br>
134+
@property (nonatomic, weak, nullable) id<TYPagerControllerDataSource> dataSource;
135+
@property (nonatomic, weak, nullable) id<TYPagerControllerDelegate> delegate;
136+
// pagerController's layout,don't set layout's dataSource to other
137+
@property (nonatomic, strong, readonly) TYPagerViewLayout<UIViewController *> *layout;
138+
@property (nonatomic, weak, readonly) UIScrollView *scrollView;
89139
90-
如果你想自己添加TabBar,你可以继承TYPagerController 然后设置 contentTopEdging ,留出高度添加TabBar,你也可以 直接继承 TYTabPagerController或者TYTabButtonPagerController 设置contentTopEdging(TabBar height) ,我帮你创建了Tabbar,你只要调用registerCellClass 注册cell(遵守TYTabTitleCellProtocol),然后在代理方法里改变cell。<br>
140+
@property (nonatomic, assign, readonly) NSInteger countOfControllers;
141+
@property (nonatomic, assign, readonly) NSInteger curIndex;// default -1
91142
92-
关于默认index,可以再viewdidload中调用<br>
93-
```objc
94-
// 默认第2页 注意:pagerController 默认自动调用reloadData的时机,是在viewWillAppear和viewWillLayoutSubviews 而viewDidLoad至此之前,所以需要手动调用reloadData
95-
[_pagerController reloadData];
96-
[_pagerController moveToControllerAtIndex:1 animated:NO];
97-
```
98-
更多的使用方法 请查看 demo。
143+
@property (nonatomic, strong, nullable, readonly) NSArray<UIViewController *> *visibleControllers;
144+
145+
@property (nonatomic, assign) UIEdgeInsets contentInset;
146+
147+
//if not visible, prefecth, cache view at index, return nil
148+
- (UIViewController *_Nullable)controllerForIndex:(NSInteger)index;
99149
100-
* **first method**
150+
// register && dequeue's usage like tableView
151+
- (void)registerClass:(Class)Class forControllerWithReuseIdentifier:(NSString *)identifier;
152+
- (void)registerNib:(UINib *)nib forControllerWithReuseIdentifier:(NSString *)identifier;
153+
- (UIViewController *)dequeueReusableControllerWithReuseIdentifier:(NSString *)identifier forIndex:(NSInteger)index;
101154
155+
// scroll to index
156+
- (void)scrollToControllerAtIndex:(NSInteger)index animate:(BOOL)animate;
157+
158+
// update data and layout,but don't reset propertys(curIndex,visibleDatas,prefechDatas)
159+
- (void)updateData;
160+
161+
// reload data and reset propertys
162+
- (void)reloadData;
163+
```
164+
165+
##Usage Demo
166+
* TYTabPagerView
102167
```objc
103-
// add pagerController
104-
- (void)addPagerController
105-
{
106-
TYTabButtonPagerController *pagerController = [[TYTabButtonPagerController alloc]init];
107-
pagerController.dataSource = self;
108-
pagerController.adjustStatusBarHeight = YES;
109-
//pagerController.cellWidth = 56;
110-
pagerController.cellSpacing = 8;
111-
pagerController.barStyle = _variable ? TYPagerBarStyleProgressBounceView: TYPagerBarStyleProgressView;
112-
113-
pagerController.view.frame = self.view.bounds;
114-
[self addChildViewController:pagerController];
115-
[self.view addSubview:pagerController.view];
116-
_pagerController = pagerController;
168+
- (void)addTabPagerView {
169+
TYTabPagerView *pagerView = [[TYTabPagerView alloc]init];
170+
pagerView.tabBar.layout.barStyle = TYPagerBarStyleCoverView;
171+
pagerView.tabBar.progressView.backgroundColor = [UIColor lightGrayColor];
172+
pagerView.dataSource = self;
173+
pagerView.delegate = self;
174+
[self.view addSubview:pagerView];
175+
_pagerView = pagerView;
117176
}
118177

119-
#pragma mark - TYPagerControllerDataSource
178+
#pragma mark - TYTabPagerViewDataSource
120179

121-
- (NSInteger)numberOfControllersInPagerController
122-
{
123-
return 30;
180+
- (NSInteger)numberOfViewsInTabPagerView {
181+
return _datas.count;
124182
}
125183

126-
- (NSString *)pagerController:(TYPagerController *)pagerController titleForIndex:(NSInteger)index
127-
{
128-
return index %2 == 0 ? [NSString stringWithFormat:@"Tab %ld",index]:[NSString stringWithFormat:@"Tab Tab %ld",index];
184+
- (UIView *)tabPagerView:(TYTabPagerView *)tabPagerView viewForIndex:(NSInteger)index prefetching:(BOOL)prefetching {
185+
UIView *view = [[UIView alloc]initWithFrame:[tabPagerView.layout frameForItemAtIndex:index]];
186+
view.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:arc4random()%255/255.0];
187+
//NSLog(@"viewForIndex:%ld prefetching:%d",index,prefetching);
188+
return view;
129189
}
130190

131-
- (UIViewController *)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index
132-
{
133-
if (index%3 == 0) {
134-
CustomViewController *VC = [[CustomViewController alloc]init];
135-
VC.text = [@(index) stringValue];
136-
return VC;
137-
}else if (index%3 == 1) {
138-
ListViewController *VC = [[ListViewController alloc]init];
139-
VC.text = [@(index) stringValue];
140-
return VC;
141-
}else {
142-
CollectionViewController *VC = [[CollectionViewController alloc]init];
143-
VC.text = [@(index) stringValue];
144-
return VC;
145-
}
191+
- (NSString *)tabPagerView:(TYTabPagerView *)tabPagerView titleForIndex:(NSInteger)index {
192+
NSString *title = _datas[index];
193+
return title;
146194
}
147-
148195
```
149196

150-
* **second method**
151-
197+
* TYTabPagerController
152198
```objc
153-
@interface CustomPagerController : TYTabButtonPagerController
154-
155-
@end
156-
157-
@implementation CustomPagerController
199+
@interface TabPagerControllerDemoController : TYTabPagerController
158200

159201
- (void)viewDidLoad {
160-
// set bar style will reset progress propertys, set it behind [super viewdidload]
161-
self.barStyle = TYPagerBarStyleProgressBounceView;
162202
[super viewDidLoad];
163203
// Do any additional setup after loading the view.
164-
self.adjustStatusBarHeight = YES;
165-
self.cellSpacing = 8;
204+
self.title = @"TabPagerControllerDemoController";
205+
self.tabBar.layout.barStyle = TYPagerBarStyleProgressView;
206+
self.dataSource = self;
207+
self.delegate = self;
208+
209+
[self loadData];
166210
}
167211

168-
#pragma mark - TYPagerControllerDataSource
212+
#pragma mark - TYTabPagerControllerDataSource
169213

170-
- (NSInteger)numberOfControllersInPagerController
171-
{
172-
return 30;
214+
- (NSInteger)numberOfControllersInTabPagerController {
215+
return _datas.count;
173216
}
174217

175-
- (NSString *)pagerController:(TYPagerController *)pagerController titleForIndex:(NSInteger)index
176-
{
177-
return index %2 == 0 ? [NSString stringWithFormat:@"Tab %ld",index]:[NSString stringWithFormat:@"Tab Tab %ld",index];
178-
}
179-
180-
- (UIViewController *)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index
181-
{
218+
- (UIViewController *)tabPagerController:(TYTabPagerController *)tabPagerController controllerForIndex:(NSInteger)index prefetching:(BOOL)prefetching {
182219
if (index%3 == 0) {
183220
CustomViewController *VC = [[CustomViewController alloc]init];
184221
VC.text = [@(index) stringValue];
@@ -194,9 +231,15 @@ if you want to add coustom TabBar, you can inherit TYPagerController,and set c
194231
}
195232
}
196233

197-
@end
198-
234+
- (NSString *)tabPagerController:(TYTabPagerController *)tabPagerController titleForIndex:(NSInteger)index {
235+
NSString *title = _datas[index];
236+
return title;
237+
}
199238
```
239+
240+
241+
更多的使用方法 请查看 demo。
242+
200243
### Contact
201244
如果你发现bug,please pull reqeust me <br>
202245
如果你有更好的改进,please pull reqeust me <br>

ScreenShot/TYPagerController7.gif

486 KB
Loading

TYPagerController.podspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
22
# 名称 使用的时候pod search [name]
33
s.name = "TYPagerController"
44
# 代码库的版本
5-
s.version = "1.0.0"
5+
s.version = "2.0.1"
66
# 简介
77
s.summary = "page scroll View controller,simple,high custom,and have tabBar styles."
88
# 主页
@@ -13,12 +13,12 @@ s.license = { :type => 'MIT', :file => 'LICENSE' }
1313
s.author = { "tany" => "122074809@qq.com" }
1414
# 作者主页 s.social_media_url =""
1515
# 代码库最低支持的版本
16-
s.platform = :ios, "6.0"
16+
s.platform = :ios, "7.0"
1717
# 代码的Clone 地址 和 tag 版本
1818
s.source = { :git => "https://github.com/12207480/TYPagerController.git", :tag => s.version.to_s }
1919
# 如果使用pod 需要导入哪些资源
2020
s.source_files = "TYPagerControllerDemo/TYPagerController/**/*.{h,m}"
2121
# s.resources = "**/*/*.bundle"
2222
# 框架是否使用的ARC
2323
s.requires_arc = true
24-
end
24+
end

0 commit comments

Comments
 (0)