forked from TextureGroup/Texture
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathASPagerNode.h
133 lines (110 loc) · 4.27 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
//
// ASPagerNode.h
// Texture
//
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
//
#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>
@end
/**
* A horizontal, paging collection node.
*/
@interface ASPagerNode : ASCollectionNode
/**
* Configures a default horizontal, paging flow layout with 0 inter-item spacing.
*/
- (instancetype)init;
/**
* Initializer with custom-configured flow layout properties.
*
* NOTE: The flow layout must have a horizontal scroll direction.
*/
- (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 (readonly) ASCollectionView *view;
/**
* Returns the current page index. Main thread only.
*/
@property (nonatomic, 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) BOOL allowsAutomaticInsetsAdjustment;
@end
NS_ASSUME_NONNULL_END