ZYCornerRadius icon indicating copy to clipboard operation
ZYCornerRadius copied to clipboard

UITableViewCell、UICollectionViewCell中使用,卡顿更严重了

Open yujieace opened this issue 6 years ago • 4 comments

RT,使用传统方式设置圆角,iPhone 7帧率约57fps,使用这个类库设置圆角,帧率直接降低至50fps以下,画面产生明显卡顿。

仔细查看代码,发现通过对image的观察者实现替换操作,但是,这个image的裁剪操作是在当前线程完成的,也就是说设置image是在主线程完成的操作,这个裁剪也是主线程完成的,我不知道作者是基于什么考虑在主线程做这个操作的,并且这个操作并没有缓存,也就是说,每次设置都要裁剪。这导致相当严重的性能问题。

yujieace avatar Aug 02 '17 03:08 yujieace

我感觉也是变卡了。。。58变54,52

bacy avatar Aug 20 '17 09:08 bacy

实际上可以使用YYImage来进行圆角优化,这个库我试验过了,确实没什么用。每次设置图片都会裁剪,无论是否已经裁剪过,也没有良好的缓存机制来保障性能。建议使用YYImage来裁剪圆角。话说这么多的star哪来的,用过的应该都会感觉到卡顿严重的。

yujieace avatar Aug 31 '17 10:08 yujieace

确实,裁剪圆角没问题,不过都在主线程操作,也没有考虑缓存,在TableView中确实不合适

bacy avatar Sep 06 '17 02:09 bacy

修改一下,用着还行。

  • (void)zy_cornerRadiusWithImage:(UIImage *)image cornerRadius:(CGFloat)cornerRadius rectCornerType:(UIRectCorner)rectCornerType { CGFloat scale = [UIScreen mainScreen].scale; CGSize cornerRadii = CGSizeMake(cornerRadius, cornerRadius); dispatch_async(dispatch_get_global_queue(0, 0), ^{ UIGraphicsBeginImageContextWithOptions(image.size, NO, scale); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextScaleCTM(context, 1, -1); CGContextTranslateCTM(context, 0, -image.size.height); CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); UIBezierPath *cornerPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:rectCornerType cornerRadii:cornerRadii]; [cornerPath closePath]; CGContextSaveGState(context); [cornerPath addClip]; [self drawBorder:cornerPath]; CGContextDrawImage(context, rect, image.CGImage); CGContextRestoreGState(context); UIImage * processedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

      dispatch_async(dispatch_get_main_queue(), ^{
      	if (processedImage) {
      		objc_setAssociatedObject(processedImage, &kProcessedImage, @(1), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
      	}
      	self.image = processedImage;
      });
    

    }); }

rbyyy avatar Nov 16 '18 11:11 rbyyy