Files
featherVoice/Pods/JXPagingView/Sources/JXPagerView/JXPagerListRefreshView.m

110 lines
5.1 KiB
Mathematica
Raw Normal View History

2025-08-08 10:49:36 +08:00
//
// JXPagerListRefreshView.m
// JXPagerView
//
// Created by jiaxin on 2018/8/28.
// Copyright © 2018 jiaxin. All rights reserved.
//
#import "JXPagerListRefreshView.h"
@interface JXPagerListRefreshView()
@property (nonatomic, assign) CGFloat lastScrollingListViewContentOffsetY;
@end
@implementation JXPagerListRefreshView
- (instancetype)initWithDelegate:(id<JXPagerViewDelegate>)delegate listContainerType:(JXPagerListContainerType)type {
self = [super initWithDelegate:delegate listContainerType:type];
if (self) {
self.mainTableView.bounces = NO;
}
return self;
}
- (void)preferredProcessListViewDidScroll:(UIScrollView *)scrollView {
BOOL shouldProcess = YES;
if (self.currentScrollingListView.contentOffset.y > self.lastScrollingListViewContentOffsetY) {
//
}else {
//
if (self.mainTableView.contentOffset.y == 0) {
shouldProcess = NO;
}else {
if (self.mainTableView.contentOffset.y < self.mainTableViewMaxContentOffsetY) {
//mainTableViewheaderlistScrollView0
if (self.currentList && [self.currentList respondsToSelector:@selector(listScrollViewWillResetContentOffset)]) {
[self.currentList listScrollViewWillResetContentOffset];
}
[self setListScrollViewToMinContentOffsetY:self.currentScrollingListView];
if (self.automaticallyDisplayListVerticalScrollIndicator) {
self.currentScrollingListView.showsVerticalScrollIndicator = NO;
}
}
}
}
if (shouldProcess) {
if (self.mainTableView.contentOffset.y < self.mainTableViewMaxContentOffsetY) {
//scrollView.contentOffset.y0
if (self.currentScrollingListView.contentOffset.y > [self minContentOffsetYInListScrollView:self.currentScrollingListView]) {
//mainTableViewheaderlistScrollView0
if (self.currentList && [self.currentList respondsToSelector:@selector(listScrollViewWillResetContentOffset)]) {
[self.currentList listScrollViewWillResetContentOffset];
}
[self setListScrollViewToMinContentOffsetY:self.currentScrollingListView];
if (self.automaticallyDisplayListVerticalScrollIndicator) {
self.currentScrollingListView.showsVerticalScrollIndicator = NO;
}
}
} else {
//mainTableViewheadermainTableViewlistScrollView
self.mainTableView.contentOffset = CGPointMake(0, self.mainTableViewMaxContentOffsetY);
if (self.automaticallyDisplayListVerticalScrollIndicator) {
self.currentScrollingListView.showsVerticalScrollIndicator = YES;
}
}
}
self.lastScrollingListViewContentOffsetY = self.currentScrollingListView.contentOffset.y;
}
- (void)preferredProcessMainTableViewDidScroll:(UIScrollView *)scrollView {
if (self.pinSectionHeaderVerticalOffset != 0) {
if (!(self.currentScrollingListView != nil && self.currentScrollingListView.contentOffset.y > [self minContentOffsetYInListScrollView:self.currentScrollingListView])) {
//listView
if (scrollView.contentOffset.y <= 0) {
self.mainTableView.bounces = NO;
self.mainTableView.contentOffset = CGPointZero;
return;
}else {
self.mainTableView.bounces = YES;
}
}
}
if (self.currentScrollingListView != nil && self.currentScrollingListView.contentOffset.y > [self minContentOffsetYInListScrollView:self.currentScrollingListView]) {
//mainTableViewheaderlistViewmainTableViewcontentOffset
[self setMainTableViewToMaxContentOffsetY];
}
if (scrollView.contentOffset.y < self.mainTableViewMaxContentOffsetY) {
//mainTableViewheaderlistViewcontentOffset
for (id<JXPagerViewListViewDelegate> list in self.validListDict.allValues) {
//
UIScrollView *listScrollView = [list listScrollView];
if (listScrollView.contentOffset.y > 0) {
if ([list respondsToSelector:@selector(listScrollViewWillResetContentOffset)]) {
[list listScrollViewWillResetContentOffset];
}
[self setListScrollViewToMinContentOffsetY:listScrollView];
}
}
}
if (scrollView.contentOffset.y > self.mainTableViewMaxContentOffsetY && self.currentScrollingListView.contentOffset.y == [self minContentOffsetYInListScrollView:self.currentScrollingListView]) {
//mainTableViewheaderViewlistView
[self setMainTableViewToMaxContentOffsetY];
}
}
@end