在我的項目中,我需要使用AsyncImageView
加載圖像。我也希望這些圖像是圓形的。圖像大多出現在桌面視圖中,所以我無法使用AsyncImageView's
圖層上的粗糙角落,因爲這對應用的性能有非常非常負面的影響。drawRect未在AsyncImageView的子類中調用
所以我決定做的是創造AsyncImageView
一個子類(因爲我需要在我的項目的其他意見的原非圓形AsyncImageView),稱爲RoundedAsyncImageView
,其中我只實現了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);
}
我有這個圓形圖像應該出現的單元格的xib,用IB創建。所以我只是將UIImageView
元素的自定義類別更改爲RoundedAsyncImageView
,將圖像視圖的IBOutlet
更改爲RoundedAsyncImageView
。現在的問題是drawRect
沒有被調用。任何想法爲什麼?
編輯: 我讀了UIImageView
子類不調用drawRect,並且我應該簡單地在常規UIView
子類中繪製圖像。問題是,我實際上做不到這一點,因爲我需要AsyncImageView
的功能來異步加載圖像。有沒有辦法做到這一點?上UIImageView
就像我說的,我不想使用cornerRadius,因爲它對錶視圖的性能(即滾動)有不利影響。所以如果我用drawRect使用你的解決方案,我該怎麼做呢?這意味着在UIView子類中,我需要一個drawRect方法來改變AsyncImageView,對吧? – damjandd
drawRect方法不會更改asyncImageView,它是裁剪imageView的唯一目的。在drawRect中實現剪輯方法,並讓asyncImageView處理它的內容更改。 – johnMa
所以這個UIView將成爲一個封裝的AsyncImageView,對吧? – damjandd