You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
5.4 KiB

//
// TFCoveragePageTurningController.h
// TFReader
//
// Created by 谢腾飞 on 2020/12/21.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class TFCoveragePageTurningController;
typedef NS_ENUM(NSUInteger ,TFPageRollingDirection) {
TFPageRollingDirectionNone = 0, // 未知状态
TFPageRollingDirectionLeft = 1, // 上一页
TFPageRollingDirectionRight = 2 // 下一页
};
// 注意:!!!!!!!!!!!!!!
// 在以下所有提供的方法中 包含View和Controller的方法只需要实现其中之一就可以了
// 比如:contentModeController = YES (默认)只需要实现所有的Controller方法即可
// contentModeController = NO (可自己根据实际需求设置)只需要实现所有的View方法即可
// 控件支持数据源分段加载 比如小说阅读时 可以先加载一部分展示后计算准确页数在reload
/**
TFCoveragePageTurningController
*/
@protocol TFCoveragePageTurningControllerDataSource <NSObject>
@required
/**
@param pageController pageController
@return
*/
- (NSInteger)numberOfPagesInPageController:(nonnull TFCoveragePageTurningController *)pageController;
@optional
/**
contentModeController = YES
@param pageController pageController
@param index
@return
*/
- (nullable UIViewController *)pageController:(nonnull TFCoveragePageTurningController *)pageController controllerForIndex:(NSInteger)index;
/**
contentModeController = NO
@param pageController pageController
@param index
@return
*/
- (nullable UIView *)pageController:(nonnull TFCoveragePageTurningController *)pageController viewForIndex:(NSInteger)index direction:(TFPageRollingDirection)rollingDirection;
@end
/**
TFCoveragePageTurningController
*/
@protocol TFCoveragePageTurningControllerDelegate <NSObject>
@optional
/**
Controller
@param pageController pageController
@param currentController Controller
@param currentIndex
*/
- (void)pageController:(nonnull TFCoveragePageTurningController *)pageController currentController:(nullable UIViewController *)currentController currentIndex:(NSInteger)currentIndex;
/**
View
@param pageController pageController
@param currentView View
@param currentIndex
*/
- (void)pageController:(nonnull TFCoveragePageTurningController *)pageController currentView:(nullable UIView *)currentView currentIndex:(NSInteger)currentIndex direction:(TFPageRollingDirection)rollingDirection;
/**
@param pageController pageController
*/
- (void)pageControllerDidSwitchToFirst:(nonnull TFCoveragePageTurningController *)pageController;
/**
@param pageController pageController
*/
- (void)pageControllerDidSwitchToLast:(nonnull TFCoveragePageTurningController *)pageController;
/**
@param pageController pageController
*/
- (void)pageControllerSwitchToLastDisabled:(nonnull TFCoveragePageTurningController *)pageController;
/**
@param pageController pageController
*/
- (void)pageControllerSwitchToNextDisabled:(nonnull TFCoveragePageTurningController *)pageController;
@end
@interface TFCoveragePageTurningController : UIViewController
/*! 数据源代理 */
@property(nonatomic ,weak ,nullable) id<TFCoveragePageTurningControllerDataSource> dataSource;
/*! 代理 */
@property(nonatomic ,weak ,nullable) id<TFCoveragePageTurningControllerDelegate> delegate;
/*! Controller内容模式 default YES / View内容模式 NO */
@property(nonatomic) BOOL contentModeController;
/*! 动画开启状态 default:YES */
@property(nonatomic) BOOL switchAnimated;
/*! 滑动切换启用状态 default:YES */
@property(nonatomic) BOOL switchSlideEnabled;
/*! 单击切换启用状态 default:YES */
@property(nonatomic) BOOL switchTapEnabled;
/*! 循环切换启用状态 default:YES */
@property(nonatomic) BOOL circleSwitchEnabled;
/*! 上一页切换启用状态 default:YES */
@property(nonatomic) BOOL switchToLastEnabled;
/*! 下一页切换启用状态 default:YES */
@property(nonatomic) BOOL switchToNextEnabled;
/*! 当前控制器 */
@property(nonatomic ,strong ,readonly ,nullable) UIViewController *currentController;
/*! 当前显示的View */
@property(nonatomic ,strong ,readonly ,nullable) UIView *currentView;
/*! 是否正在动画中 */
@property(nonatomic ,readonly) BOOL isAnimating;
#pragma mark - Method
/**
(currentIndex != 0 && currentIndex < numberOfPages)
*/
- (void)reloadData;
/**
*/
- (void)reloadDataToFirst;
/**
@param index
@return BOOL结果
*/
- (BOOL)canSwitchToIndex:(NSInteger)index;
/**
canSwitchToIndex:index
@param index
@param animated
*/
- (void)switchToIndex:(NSInteger)index animated:(BOOL)animated;
@end
NS_ASSUME_NONNULL_END