LuKane/KNPhotoBrowser

翻页严重卡顿

wblzu opened this issue · 11 comments

wblzu commented

在- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath 方法中,
UIImageView *tempView = [self tempViewFromSourceViewWithCurrentIndex:indexPath.row];会导致翻页的时候卡顿

我这边在 iPhone6s 和 iPhone12 上测试, 都没有出现卡顿现象!! 建议在真机上跑

wblzu commented

我也是用iPhone 12运行的。IMController的数据源更换成网络图片,不要本地图片。然后点击tableview列表中的最后一张图,由此打开photobrowser,然后向右滑动翻页,显示数据源数组头部的图片,就会看到卡顿了。

可能是 IMController tableViewCell写的有问题, 若确定是Demo的问题, 则不回复你了! 若是 photoBrowser的问题, 我这边会做修改再回复你的!

Demo写的有问题罢了!!

wblzu commented

不是的,在项目中用也有问题。我定位到了问题。只有这样修改才能避免翻页卡顿

  • (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
    // [cell prepareForReuse];

    KNPhotoItems *item = self.itemsArr[indexPath.row];
    // UIImageView *tempView = [self tempViewFromSourceViewWithCurrentIndex:indexPath.row];
    if (item.isVideo) {
    KNPhotoVideoCell *cell1 = (KNPhotoVideoCell *)cell;
    // [cell1 playerWithURL:item.url placeHolder:tempView.image];
    [cell1 playerWithURL:item.url placeHolder:item.sourceImage];
    if (_isNeedAutoPlay == true) {
    [cell1 setIsNeedAutoPlay:true];
    }
    [cell1 setPresentedMode:self.presentedMode];
    } else {
    KNPhotoBaseCell *cell1 = (KNPhotoBaseCell *)cell;
    // [cell1 sd_ImageWithUrl:item.url placeHolder:tempView.image photoItem:item];
    [cell1 sd_ImageWithUrl:item.url placeHolder:item.sourceImage photoItem:item];
    [cell1 setPresentedMode:self.presentedMode];
    }
    }

有没有考虑过 item.sourceImage 为空!

wblzu commented

是会有这样的问题,但是这样修改之后至少它不卡了。我给你邮箱发调试视频吧,真的很卡的。

你这边别用 IMController 测试了, 用其他的Controller试试, 比如 第一个Controller, 不会出现卡顿现象

试了一下!! 你说的卡顿现象 只会在 低网速的时候 才会出现!
排查了一下原因: 是因为 根据网络图片的url 来获取 size, 这样会阻塞主线程!!
现在已经修改过了!! 更新一下新版本即可

wblzu commented

大佬给力

我用的2.4.6版本滑动的时候也会卡,iPhone6s plus iOS11系统

  • (UIImageView *)tempViewFromSourceViewWithCurrentIndex:(NSInteger)currentIndex这个方法的确引起了卡顿