JXPagingView icon indicating copy to clipboard operation
JXPagingView copied to clipboard

JXPagerListContainerViewController计算出来的生命周期在手指切换的时候是错误的

Open DeftMKJ opened this issue 4 years ago • 6 comments

bug提交前阅读 1.请先仔细阅读文档,尤其是【其他注意事项】文档,里面有常见问题的解决方案; 2.请先搜索已有的Issues,尝试找到相同问题的讨论; 3.请先阅读相关类的API、源码,尝试从源码找到答案; 4.如果以上步骤都未能解决你的疑问,欢迎提交ISSUE;

bug描述 生命周期在用手指切换tab的时候全部错误了

以下两段代码计算生命周期有问题,而且是必现的,我尝试修复,短时间解决不了,麻烦作者给点思路或者给修复下

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView { ...... [self listDidAppearOrDisappear:scrollView]; }

  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { // NSLog(@"2222222"); if (self.willDisappearIndex != -1) { [self listWillAppear:self.willDisappearIndex]; [self listWillDisappear:self.willAppearIndex]; [self listDidAppear:self.willDisappearIndex]; [self listDidDisappear:self.willAppearIndex]; self.willDisappearIndex = -1; self.willAppearIndex = -1; } if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewWDidEndScroll:)]) { [self.delegate listContainerViewWDidEndScroll:self]; } }

版本号 1.JXPagingView版本号:2.0.12 2.OC还是Swift版本 OC 3.手机系统版本号:13.6.1 4.手机型号:iphone xs max

复现步骤

  1. 遇到问题的相关效果、类是:JXPagerListContainerView 2.具体的操作步骤是:比如作者的Demo,第一个例子打开,正常下面三个tab,你左右切换,或者点头部切换都是没问题,生命周期都是正常的,但是如果你能力tab切换到爱好tab,切过去的时候手指一直按照不松开,也就是手指拖动整个屏幕宽度的距离,等切换到第二个tab的时候,生命周期调用的是前一个tab的,以下代码会出问题吗,整个生命周期就混乱了。

截图、GIF 提供bug出现时的截图或者GIF。

截屏2020-09-09 下午2 13 10

可以看到已经用手指切换到了第二个tab,但是你看下面回调的生命周期是错误的,下表是0

DeftMKJ avatar Sep 09 '20 06:09 DeftMKJ

`- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

if (self.willDisappearIndex != -1) {
    CGFloat currentIndexPercent = scrollView.contentOffset.x/scrollView.bounds.size.width;
    NSInteger disappearIndex = self.willDisappearIndex;
    NSInteger appearIndex = self.willAppearIndex;
    if (self.willAppearIndex > self.willDisappearIndex) {
        if (currentIndexPercent >= (self.willAppearIndex)) {
            NSLog(@"EEEEEEEEEEEEEE");
            [self listWillAppear:appearIndex];
            [self listWillDisappear:disappearIndex];
            [self listDidAppear:appearIndex];
            [self listDidDisappear:disappearIndex];
            self.willDisappearIndex = -1;
            self.willAppearIndex = -1;
        }else{
            [self listWillAppear:disappearIndex];
            [self listWillDisappear:appearIndex];
            [self listDidAppear:disappearIndex];
            [self listDidDisappear:appearIndex];
            self.willDisappearIndex = -1;
            self.willAppearIndex = -1;
        }
    }else {
        if (currentIndexPercent <= (self.willAppearIndex)) {
            
            NSLog(@"FFFFFFFFFFFFFFFFF");
            [self listWillAppear:appearIndex];
            [self listWillDisappear:disappearIndex];
            [self listDidAppear:appearIndex];
            [self listDidDisappear:disappearIndex];
            self.willDisappearIndex = -1;
            self.willAppearIndex = -1;
        }else{
            [self listWillAppear:disappearIndex];
            [self listWillDisappear:appearIndex];
            [self listDidAppear:disappearIndex];
            [self listDidDisappear:appearIndex];
            self.willDisappearIndex = -1;
            self.willAppearIndex = -1;
        }
    }
}
if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewWDidEndScroll:)]) {
    [self.delegate listContainerViewWDidEndScroll:self];
}

}` 我直接在这个方法这样写了,我没有看得很细,您看下是否就可以,我看你的代码是直接不管就回滚到之前的index,我这边做了判断,看下是否可以,我目前看来生命周期就正常了,看你是否可以优化下,修复这个Bug,生命周期对我来说太重要了,我可能考虑不全,麻烦您看下

DeftMKJ avatar Sep 09 '20 09:09 DeftMKJ

我也遇到这个问题了,手指拖到到快要完全切换的时候松开就会出现,导致vc的viewDidAppear和viewDidDisappear完全乱了,非常致命

yautou avatar Feb 05 '21 05:02 yautou

你能在iOS14.2系统复现吗?

pujiaxin33 avatar Mar 22 '21 03:03 pujiaxin33

手动滑,来回切,生命周期完全是乱的,作者大大应该没时间修复了,自己改改吧 @yautou

DeftMKJ avatar Apr 03 '21 11:04 DeftMKJ

@DeftMKJ 方便贴一下你修改的代码吗?我还没有复现出来

pujiaxin33 avatar Apr 06 '21 02:04 pujiaxin33

很容易复现出来,快速滑动就会出现, 崩溃

Han2L avatar Sep 08 '21 02:09 Han2L