forked from TextureGroup/Texture
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathASPagerNode.h
143 lines (117 loc) · 4.73 KB
/
ASPagerNode.h
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
//
// ASPagerNode.h
// AsyncDisplayKit
//
// Created by Levi McCallum on 12/7/15.
//
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
//
#import <AsyncDisplayKit/ASCollectionNode.h>
@class ASPagerNode;
@class ASPagerFlowLayout;
NS_ASSUME_NONNULL_BEGIN
#define ASPagerNodeDataSource ASPagerDataSource
@protocol ASPagerDataSource <NSObject>
/**
* This method replaces -collectionView:numberOfItemsInSection:
*
* @param pagerNode The sender.
* @return The total number of pages that can display in the pagerNode.
*/
- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode;
@optional
/**
* This method replaces -collectionView:nodeForItemAtIndexPath:
*
* @param pagerNode The sender.
* @param index The index of the requested node.
* @return a node for display at this index. This will be called on the main thread and should
* not implement reuse (it will be called once per row). Unlike UICollectionView's version,
* this method is not called when the row is about to display.
*/
- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index;
/**
* This method replaces -collectionView:nodeBlockForItemAtIndexPath:
* This method takes precedence over pagerNode:nodeAtIndex: if implemented.
*
* @param pagerNode The sender.
* @param index The index of the requested node.
* @return a block that creates the node for display at this index.
* Must be thread-safe (can be called on the main thread or a background
* queue) and should not implement reuse (it will be called once per row).
*/
- (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index;
@end
@protocol ASPagerDelegate <ASCollectionDelegate>
@optional
/**
* Provides the constrained size range for measuring the node at the index.
*
* @param pagerNode The sender.
* @param index The index of the node.
* @return A constrained size range for layout the node at this index.
*/
- (ASSizeRange)pagerNode:(ASPagerNode *)pagerNode constrainedSizeForNodeAtIndex:(NSInteger)index ASDISPLAYNODE_DEPRECATED_MSG("Pages in a pager node should be the exact size of the collection node (default behavior).");
@end
@interface ASPagerNode : ASCollectionNode
/**
* Configures a default horizontal, paging flow layout with 0 inter-item spacing.
*/
- (instancetype)init;
/**
* Initializer with custom-configured flow layout properties.
*/
- (instancetype)initWithCollectionViewLayout:(ASPagerFlowLayout *)flowLayout;
/**
* Data Source is required, and uses a different protocol from ASCollectionNode.
*/
- (void)setDataSource:(nullable id <ASPagerDataSource>)dataSource;
- (nullable id <ASPagerDataSource>)dataSource AS_WARN_UNUSED_RESULT;
/**
* Delegate is optional.
* This includes UIScrollViewDelegate as well as most methods from UICollectionViewDelegate, like willDisplay...
*/
- (void)setDelegate:(nullable id <ASPagerDelegate>)delegate;
- (nullable id <ASPagerDelegate>)delegate AS_WARN_UNUSED_RESULT;
/**
* The underlying ASCollectionView object.
*/
@property (nonatomic, readonly) ASCollectionView *view;
/**
* Returns the current page index
*/
@property (nonatomic, assign, readonly) NSInteger currentPageIndex;
/**
* Scroll the contents of the receiver to ensure that the page is visible
*/
- (void)scrollToPageAtIndex:(NSInteger)index animated:(BOOL)animated;
/**
* Returns the node for the passed page index
*/
- (ASCellNode *)nodeForPageAtIndex:(NSInteger)index AS_WARN_UNUSED_RESULT;
/**
* Returns the index of the page for the cell passed or NSNotFound
*/
- (NSInteger)indexOfPageWithNode:(ASCellNode *)node;
/**
* Tells the pager node to allow its view controller to automatically adjust its content insets.
*
* @see UIViewController.automaticallyAdjustsScrollViewInsets
*
* @discussion ASPagerNode should usually not have its content insets automatically adjusted
* because it scrolls horizontally, and flow layout will log errors because the pages
* do not fit between the top & bottom insets of the collection view.
*
* The default value is NO, which means that ASPagerNode expects that its view controller will
* have automaticallyAdjustsScrollViewInsets=NO.
*
* If this property is NO, but your view controller has automaticallyAdjustsScrollViewInsets=YES,
* the pager node will set the property on the view controller to NO and log a warning message. In the future,
* the pager node will just log the warning, and you'll need to configure your view controller on your own.
*/
@property (nonatomic, assign) BOOL allowsAutomaticInsetsAdjustment;
@end
NS_ASSUME_NONNULL_END