Ios 在AsyncImageView的子类中未调用drawRect

Ios 在AsyncImageView的子类中未调用drawRect,ios,uiimageview,drawrect,rounded-corners,Ios,Uiimageview,Drawrect,Rounded Corners,在我的项目中,我需要使用AsyncImageView加载图像。我还希望这些图像是圆形的。图像主要出现在表视图中,因此我不能在AsyncImageView的层上使用圆角,因为这对应用程序的性能有非常非常负面的影响 因此,我决定创建一个名为RoundedAsyncImageView的子类AsyncImageView(因为我的项目中的其他视图需要原始的非循环AsyncImageView),在该子类中,我只实现了drawRect方法,如下所示: - (void)drawRect:(CGRect)rect

在我的项目中,我需要使用
AsyncImageView
加载图像。我还希望这些图像是圆形的。图像主要出现在表视图中,因此我不能在
AsyncImageView的
层上使用圆角,因为这对应用程序的性能有非常非常负面的影响

因此,我决定创建一个名为
RoundedAsyncImageView
的子类
AsyncImageView
(因为我的项目中的其他视图需要原始的非循环AsyncImageView),在该子类中,我只实现了
drawRect
方法,如下所示:

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSaveGState(ctx);
    CGPathRef clippath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:17].CGPath;
    CGContextAddPath(ctx, clippath);
    CGContextClip(ctx);
    [self.image drawInRect:rect];
    CGContextRestoreGState(ctx);
}
我使用IB创建了用于显示此圆形图像的单元格的xib。因此,我刚刚将
UIImageView
元素的自定义类更改为
RoundedAsyncImageView
,将图像视图的
IBOutlet
s更改为
RoundedAsyncImageView
。现在的问题是,
drawRect
没有被调用。你知道为什么吗

编辑:
我读到,
UIImageView
子类不调用drawRect,我应该简单地在常规的
UIView
子类中绘制图像。问题是,我实际上不能这样做,因为我需要
AsyncImageView
的功能来异步加载图像。有什么方法可以做到这一点吗?
UIImageView
上的
DrawRect
方法与
UIView
略有不同

视图仍然有一个CALayer,但该层没有分配备份存储。相反,它使用CGImageRef作为其内容,渲染服务器将把该图像的位绘制到帧缓冲区中

在这种情况下,没有绘图。我们只是将位图数据以图像的形式传递给UIImageView

参考本文,根据我的经验,这就是为什么不能使用imageView剪辑方法的原因

以下是我的解决方案:

  • 不要创建
    AsyncImageView
    的子类,而是创建
    UIView
    的子类
  • 添加
    AsyncImageView
    ,这意味着子类将成为
    AsyncImageView
    的包装视图
  • 在drawRect中实现clip方法,并让asyncImageView处理其内容更改

  • 正如我所说,我不想使用cornerRadius,因为它会对表视图的性能产生不利影响(即滚动)。因此,如果我将您的解决方案与drawRect结合使用,我如何才能做到这一点?这意味着在UIView子类中,我需要一个drawRect方法以某种方式更改AsyncImageView,对吗?drawRect方法不会更改AsyncImageView,该视图的唯一用途是剪切imageView。在drawRect中实现clip方法,并让asyncImageView处理其内容更改。因此,此UIView将成为asyncImageView的包装器,对吗?请展开原始答案,以便我们可以将其标记为正确。我完成了所有这些操作,并且图像不是四舍五入的,而是方形的。