美文网首页
TableView 和 CollectionView数据刷新闪一

TableView 和 CollectionView数据刷新闪一

作者: Hither | 来源:发表于2017-07-21 09:55 被阅读85次

    最近检查代码 发现了两个问题 记录一下~

    解决CollectionView reloadData或者reloadSections时的刷新的闪烁问题

    将你原来的reloadData   reloadSections像这样包一下:
    
    [UIView performWithoutAnimation:^{
                [self.mainCol performBatchUpdates:^{
                    [self.mainCol reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.mainCol.numberOfSections)]];
                    [self.mainCol reloadEmptyDataSet];
                } completion:nil];
            }];
    
    

    最近使用虚线的时候 最开始发现虚线加载不出来,后来仔细想了想,可能是因为要添加虚线的UIView都还没有渲染完毕,所以才没加出来,果然实验了一下就是这样,切记~

    • 虚线
    /**
     在制定的view上添加虚线
    
     @param lineView 需要添加虚线的view
     @param lineLength 虚线长度
     @param lineSpacing 虚线与虚线之间的间隔
     @param lineColor 虚线的颜色
     */
    - (void)drawDashLine:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor {
        
        CAShapeLayer *shapeLayer = [CAShapeLayer layer];
        [shapeLayer setBounds:lineView.bounds];
        [shapeLayer setPosition:CGPointMake(CGRectGetWidth(lineView.frame) / 2, CGRectGetHeight(lineView.frame))];
        [shapeLayer setFillColor:[UIColor clearColor].CGColor];
        //  设置虚线颜色为
        [shapeLayer setStrokeColor:lineColor.CGColor];
        //  设置虚线宽度
        [shapeLayer setLineWidth:CGRectGetHeight(lineView.frame)];
        [shapeLayer setLineJoin:kCALineJoinRound];
        //  设置线宽,线间距
        [shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:lineLength], [NSNumber numberWithInt:lineSpacing], nil]];
        //  设置路径
        CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 0, 0); CGPathAddLineToPoint(path, NULL, CGRectGetWidth(lineView.frame), 0); [shapeLayer setPath:path]; CGPathRelease(path);
        //  把绘制好的虚线添加上来
        [lineView.layer addSublayer:shapeLayer];
    
    }
    
    还是这样使用:
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self drawDashLine:self.alpaLineOne lineLength:4 lineSpacing:1 lineColor:[UIColor blackColor]];
            [self drawDashLine:self.alpaLineTwo lineLength:4 lineSpacing:1 lineColor:[UIColor blackColor]];
        });
    

    合理使用@autoreleasepool

    @autoreleasepool {
            NSUInteger userCount = 100;
            for (NSUInteger i = 0; i < userCount; i ++) {
                @autoreleasepool {
                    //执行相应的逻辑
                    //两层autoreleasepool的好处在于:
                    //内层的auto可以保证每次循环结束后清理一次内存,从而减少内存需求
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:TableView 和 CollectionView数据刷新闪一

          本文链接:https://www.haomeiwen.com/subject/oqvskxtx.html