diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..836675d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +TYPagerControllerDemo.xcodeproj/project.xcworkspace/xcuserdata/chengxianghe.xcuserdatad/UserInterfaceState.xcuserstate +TYPagerControllerDemo.xcodeproj/xcuserdata/chengxianghe.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/TYPagerControllerDemo.xcodeproj/project.pbxproj b/TYPagerControllerDemo.xcodeproj/project.pbxproj index c0e88df..40cda24 100644 --- a/TYPagerControllerDemo.xcodeproj/project.pbxproj +++ b/TYPagerControllerDemo.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ B072EC0D1F1E37B100736A2E /* TYPagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = B072EC041F1E37B100736A2E /* TYPagerView.m */; }; B072EC0E1F1E37B100736A2E /* TYPagerViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = B072EC061F1E37B100736A2E /* TYPagerViewLayout.m */; }; B082E5791F0E79830084C952 /* PagerViewDmeoController.m in Sources */ = {isa = PBXBuildFile; fileRef = B082E5781F0E79830084C952 /* PagerViewDmeoController.m */; }; + EBF0109522C0E8CE00C5AFD3 /* TYPagerScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF0109422C0E8CE00C5AFD3 /* TYPagerScrollView.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -71,6 +72,8 @@ B072EC061F1E37B100736A2E /* TYPagerViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TYPagerViewLayout.m; sourceTree = ""; }; B082E5771F0E79830084C952 /* PagerViewDmeoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PagerViewDmeoController.h; sourceTree = ""; }; B082E5781F0E79830084C952 /* PagerViewDmeoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PagerViewDmeoController.m; sourceTree = ""; }; + EBF0109322C0E8CE00C5AFD3 /* TYPagerScrollView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TYPagerScrollView.h; sourceTree = ""; }; + EBF0109422C0E8CE00C5AFD3 /* TYPagerScrollView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TYPagerScrollView.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -156,6 +159,8 @@ B072EBF61F1E37B100736A2E /* TabPager */ = { isa = PBXGroup; children = ( + EBF0109322C0E8CE00C5AFD3 /* TYPagerScrollView.h */, + EBF0109422C0E8CE00C5AFD3 /* TYPagerScrollView.m */, B072EBFF1F1E37B100736A2E /* TYTabPagerView.h */, B072EC001F1E37B100736A2E /* TYTabPagerView.m */, B072EBFD1F1E37B100736A2E /* TYTabPagerController.h */, @@ -212,6 +217,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -248,6 +254,7 @@ 2B9C0F531F0E11E7009BC0BD /* ViewController.m in Sources */, B072EC071F1E37B100736A2E /* TYTabPagerBar.m in Sources */, B072EC0A1F1E37B100736A2E /* TYTabPagerController.m in Sources */, + EBF0109522C0E8CE00C5AFD3 /* TYPagerScrollView.m in Sources */, B072EC081F1E37B100736A2E /* TYTabPagerBarCell.m in Sources */, B0284FE11F1E595D00C733E6 /* TabPagerControllerDemoController.m in Sources */, B072EC0B1F1E37B100736A2E /* TYTabPagerView.m in Sources */, diff --git a/TYPagerControllerDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/TYPagerControllerDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/TYPagerControllerDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/TYPagerControllerDemo.xcodeproj/xcuserdata/cheng.xcuserdatad/xcschemes/xcschememanagement.plist b/TYPagerControllerDemo.xcodeproj/xcuserdata/cheng.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..dac984d --- /dev/null +++ b/TYPagerControllerDemo.xcodeproj/xcuserdata/cheng.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + TYPagerControllerDemo.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/TYPagerControllerDemo/PagerControllerDmeoController.m b/TYPagerControllerDemo/PagerControllerDmeoController.m index 76a96b1..f1f5b11 100644 --- a/TYPagerControllerDemo/PagerControllerDmeoController.m +++ b/TYPagerControllerDemo/PagerControllerDmeoController.m @@ -49,6 +49,7 @@ - (void)addTabPageBar { - (void)addPagerController { TYPagerController *pagerController = [[TYPagerController alloc]init]; + pagerController.layout.firstScrollToIndex = 1; pagerController.layout.prefetchItemCount = 1; //pagerController.layout.autoMemoryCache = NO; // 只有当scroll滚动动画停止时才加载pagerview,用于优化滚动时性能 diff --git a/TYPagerControllerDemo/TYPagerController/TYPagerController.h b/TYPagerControllerDemo/TYPagerController/TYPagerController.h index 380b980..6e7d598 100755 --- a/TYPagerControllerDemo/TYPagerController/TYPagerController.h +++ b/TYPagerControllerDemo/TYPagerController/TYPagerController.h @@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN 3.if controller will display,will call viewWillAppear. 4.you can register && dequeue controller, usage like tableView */ -- (UIViewController *)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index prefetching:(BOOL)prefetching; +- (UIViewController *_Nullable)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index prefetching:(BOOL)prefetching; @end @@ -78,7 +78,7 @@ NS_ASSUME_NONNULL_BEGIN // register && dequeue's usage like tableView - (void)registerClass:(Class)Class forControllerWithReuseIdentifier:(NSString *)identifier; - (void)registerNib:(UINib *)nib forControllerWithReuseIdentifier:(NSString *)identifier; -- (UIViewController *)dequeueReusableControllerWithReuseIdentifier:(NSString *)identifier forIndex:(NSInteger)index; +- (UIViewController *_Nullable)dequeueReusableControllerWithReuseIdentifier:(NSString *)identifier forIndex:(NSInteger)index; // scroll to index - (void)scrollToControllerAtIndex:(NSInteger)index animate:(BOOL)animate; diff --git a/TYPagerControllerDemo/TYPagerController/TYPagerController.m b/TYPagerControllerDemo/TYPagerController/TYPagerController.m index fbc53ed..55b2095 100755 --- a/TYPagerControllerDemo/TYPagerController/TYPagerController.m +++ b/TYPagerControllerDemo/TYPagerController/TYPagerController.m @@ -7,6 +7,7 @@ // #import "TYPagerController.h" +#import "TYPagerScrollView.h" @interface TYPagerController () { // private @@ -34,7 +35,7 @@ @implementation TYPagerController - (TYPagerViewLayout *)layout { if (!_layout) { - UIScrollView *scrollView = [[UIScrollView alloc]init]; + TYPagerScrollView *scrollView = [[TYPagerScrollView alloc]init]; TYPagerViewLayout *layout = [[TYPagerViewLayout alloc]initWithScrollView:scrollView]; layout.dataSource = self; layout.delegate = self; diff --git a/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.h b/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.h index 06b9d70..6348a38 100644 --- a/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.h +++ b/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.h @@ -68,6 +68,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, weak, nullable) id dataSource; @property (nonatomic, weak, nullable) id delegate; +@property (nonatomic, assign) NSInteger firstScrollToIndex;// default 0 + // strong,will control the delegate,don't set delegate on other place. @property (nonatomic, strong, readonly) UIScrollView *scrollView; // if viewcontroller's automaticallyAdjustsScrollViewInsets YES ,will cause frame problems, you can set YES, default YES diff --git a/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.m b/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.m index b716485..372fe46 100644 --- a/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.m +++ b/TYPagerControllerDemo/TYPagerController/TYPagerViewLayout.m @@ -93,7 +93,6 @@ @interface TYPagerViewLayout () { BOOL _scrollAnimated; BOOL _isTapScrollMoved; CGFloat _preOffsetX; - NSInteger _firstScrollToIndex; BOOL _didReloadData; BOOL _didLayoutSubViews; diff --git a/TYPagerControllerDemo/TYPagerController/TabPager/TYPagerScrollView.h b/TYPagerControllerDemo/TYPagerController/TabPager/TYPagerScrollView.h new file mode 100644 index 0000000..47f3b5c --- /dev/null +++ b/TYPagerControllerDemo/TYPagerController/TabPager/TYPagerScrollView.h @@ -0,0 +1,17 @@ +// +// TYPagerScrollView.h +// TYPagerControllerDemo +// +// Created by 程祥贺 on 2019/6/24. +// Copyright © 2019 tany. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface TYPagerScrollView : UIScrollView + +@end + +NS_ASSUME_NONNULL_END diff --git a/TYPagerControllerDemo/TYPagerController/TabPager/TYPagerScrollView.m b/TYPagerControllerDemo/TYPagerController/TabPager/TYPagerScrollView.m new file mode 100644 index 0000000..166f32a --- /dev/null +++ b/TYPagerControllerDemo/TYPagerController/TabPager/TYPagerScrollView.m @@ -0,0 +1,24 @@ +// +// TYPagerScrollView.m +// TYPagerControllerDemo +// +// Created by 程祥贺 on 2019/6/24. +// Copyright © 2019 tany. All rights reserved. +// + +#import "TYPagerScrollView.h" + +@implementation TYPagerScrollView + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { + // 首先判断otherGestureRecognizer是不是系统pop手势 + if ([otherGestureRecognizer.view isKindOfClass:NSClassFromString(@"UILayoutContainerView")]) { + // 再判断系统手势的state是began还是fail,同时判断scrollView的位置是不是正好在最左边 + if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan && self.contentOffset.x == 0) { + return YES; + } + } + return NO; +} + +@end diff --git a/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBar.m b/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBar.m index 1f8eaa8..c370e4e 100644 --- a/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBar.m +++ b/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBar.m @@ -149,6 +149,7 @@ - (void)reloadData { [_delegate pagerTabBar:self configureLayout:self.layout]; } [self.layout layoutIfNeed]; + [_progressView setBackgroundColor:_layout.progressColor]; [_collectionView reloadData]; [self.layout adjustContentCellsCenterInBar]; [self.layout layoutSubViews]; diff --git a/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBarLayout.m b/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBarLayout.m index d48b005..26fd66e 100644 --- a/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBarLayout.m +++ b/TYPagerControllerDemo/TYPagerController/TabPager/TYTabPagerBarLayout.m @@ -207,7 +207,7 @@ - (void)transitionFromCell:(UICollectionViewCell *)fr fromCell.transform = CGAffineTransformMakeScale(_selectFontScale, _selectFontScale); } if (toCell) { - toCell.titleLabel.font = _normalTextFont; + toCell.titleLabel.font = _selectedTextFont ? _selectedTextFont : _normalTextFont; toCell.titleLabel.textColor = _selectedTextColor ? _selectedTextColor : _normalTextColor; toCell.transform = CGAffineTransformIdentity; }