在我的應用程序中,我在UITableViewCell中有一個UIImageView。圖像需要顯示爲具有矩形源圖像的圓形圖像。我一直在設置imageView的圖層屬性上的角落半徑,但是這會強制屏幕渲染,這會降低滾動性能。將UIImage繪製爲一個不帶屏外渲染的圓形
這就是我目前在對細胞的awakeFromNib方法:
- (void)awakeFromNib
{
[super awakeFromNib];
self.imageBorderView.backgroundColor = [UIColor colorWithWhite:0.75f alpha:1.f];
self.imageBorderView.layer.cornerRadius = self.imageBorderView.frame.size.width/2;
}
真的基本的東西。好的,所以我剛剛觀看了2011年WWDC會議121視頻,瞭解UIKit渲染。通過使用UIBezierPaths將拐角半徑渲染移動到drawRect來解決這個問題,因爲它涉及UILabel。我subclassed UIImageView並將我的cornerRadius繪圖drawRect只發現drawRect不在UIImageView上調用。以下是文檔的相關推理:
UIImageView類經過優化,可以將其圖像繪製到顯示屏上。 UIImageView不調用其子類的drawRect:方法。如果你的子類需要包含自定義繪圖代碼,你應該改爲UIView類的子類。
因此,我將超類更改爲UIView,並使用UIBezierPath和UIImage在drawRect中手動繪製圓。這裏是我的drawRect方法:
- (void)drawRect:(CGRect)rect
{
UIBezierPath *circularPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.bounds.size.height/2.0];
[[UIColor redColor] set];
[circularPath fill];
if (self.image)
{
[self.image drawInRect:self.bounds];
}
}
它不正是我所期望的,這將紅色圓圈(進行仔細的檢查,以確保路徑是正確的),那麼它繪製矩形圖像在圈子如果一個已經設定好了。
我無法弄清楚的是如何在沒有繪製屏幕的情況下將UIImage裁剪爲圓形UIBezierPath。這意味着設置一個對象作爲掩碼不會工作。
有沒有辦法將圖像遮罩到路徑上而不會脫離屏幕?
完美。圖像遵循貝塞爾路徑並在屏幕上進行渲染。將不得不等到明天才能在設備上進行測試,但根據性能分析,這節省了大量時間。 – skladek 2014-10-27 04:41:23