text: //
  //  GTPageScrollViewDelegate.h
  //  GTPageComponent
  //
  //  Created by cocomanber on 2019/9/21.
  //  Copyright © 2019 cocomanber. All rights reserved.
  //
  
  #import <Foundation/Foundation.h>
  #import "GTPageListViewDelegate.h"
  
  @class GTPageScrollView;
  
  @protocol GTPageScrollViewDelegate <NSObject>
  
  @required
  
  /**
   返回tableHeaderView
   
   @param pageScrollView pageScrollView description
   @return tableHeaderView
   */
  - (UIView *)headerViewInPageScrollView:(GTPageScrollView *)pageScrollView;
  
  @optional
  
  #pragma mark - 是否懒加载列表，优先级高于属性isLazyLoadList
  /**
   返回是否懒加载列表（据此代理实现懒加载和非懒加载相应方法）
   
   @param pageScrollView paegScrollView description
   @return 是否懒加载
   */
  - (BOOL)shouldLazyLoadListInPageScrollView:(GTPageScrollView *)pageScrollView;
  
  #pragma mark - 非懒加载相关方法(`shouldLazyLoadListInPageScrollView`方法返回NO时必须实现下面的方法)
  /**
   返回分页视图
   
   @param pageScrollView pageScrollView description
   @return pageView
   */
  - (UIView *)pageViewInPageScrollView:(GTPageScrollView *)pageScrollView;
  
  /**
   返回listView
   
   @param pageScrollView pageScrollView description
   @return listView
   */
  - (NSArray <id <GTPageListViewDelegate>> *)listViewsInPageScrollView:(GTPageScrollView *)pageScrollView;
  
  #pragma mark - 懒加载相关方法(`shouldLazyLoadListInPageScrollView`方法返回YES时必须实现下面的方法)
  
  /**
   返回中间的segmentedView
   
   @param pageScrollView pageScrollView description
   @return segmentedView
   */
  - (UIView *)segmentedViewInPageScrollView:(GTPageScrollView *)pageScrollView;
  /**
   返回列表的数量
   
   @param pageScrollView pageScrollView description
   @return 列表的数量
   */
  - (NSInteger)numberOfListsInPageScrollView:(GTPageScrollView *)pageScrollView;
  
  /**
   根据index初始化一个列表实例，需实现`GKPageListViewDelegate`代理
   
   @param pageScrollView pageScrollView description
   @param index 对应的索引
   @return 实例对象
   */
  - (id<GTPageListViewDelegate>)pageScrollView:(GTPageScrollView *)pageScrollView initListAtIndex:(NSInteger)index;
  
  #pragma mark - mainTableView滚动相关方法
  
  /**
   mainTableView开始滑动
   
   @param scrollView mainTableView
   */
  - (void)mainTableViewWillBeginDragging:(UIScrollView *)scrollView;
  
  /**
   mainTableView滑动，用于实现导航栏渐变、头图缩放等
   
   @param scrollView mainTableView
   @param isMainCanScroll mainTableView是否可滑动，YES表示可滑动，没有到达临界点，NO表示不可滑动，已到达临界点
   */
  - (void)mainTableViewDidScroll:(UIScrollView *)scrollView isMainCanScroll:(BOOL)isMainCanScroll;
  
  /**
   mainTableView结束滑动
   
   @param scrollView mainTableView
   @param decelerate 是否将要减速
   */
  - (void)mainTableViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
  
  /**
   mainTableView结束滑动
   
   @param scrollView mainTableView
   */
  - (void)mainTableViewDidEndDecelerating:(UIScrollView *)scrollView;
  
  @end
  