? ? ? 從事iOS開發(fā)已經(jīng)一年半有余了,發(fā)現(xiàn)整天去學(xué)這學(xué)那還不如靜下心來把會的學(xué)習(xí)牢靠。一些基礎(chǔ)的東西不好好學(xué)習(xí)會成為絆腳石。
很少寫日記文章之類的,留著這個地方權(quán)當(dāng)自娛自樂吧。
quartz2d相信從事iOS開發(fā)的或者是有過cocos2d開發(fā)經(jīng)驗(yàn)的都清楚,我就不贅述了。在開發(fā)中我們也經(jīng)常會使用到圓角。通過如下代碼即可快速實(shí)現(xiàn)圓角。
//設(shè)置圓角半徑
imgView.layer.cornerRadius = 5;
//設(shè)置是否按照圓角進(jìn)行裁剪
imgView.layer.masksToBounds = YES;
這種方法可以實(shí)現(xiàn)圓角效果,但是由于這種方法的其它機(jī)制,當(dāng)屏幕上有大量經(jīng)過這種方法繪制的圓角view時,此時會明顯感覺到卡頓 別讓圓角成為你的性能殺手。
這個時候,我們可以運(yùn)用quartz2d對view進(jìn)行繪制。
這里,我們可以給UIImage 加上一個分類直接獲取到圓角圖片
- (UIImage *)circleImage{
//開啟image繪制
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
//獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//繪制一個橢圓
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextAddEllipseInRect(ctx, rect);
//對圖形進(jìn)行裁剪
CGContextClip(ctx);
//將image繪制到橢圓中
[self drawInRect:rect];
//得到當(dāng)前image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
//結(jié)束image繪制
UIGraphicsEndImageContext();
return image;
}
此時當(dāng)我們調(diào)用 [[UIImage imageNamed:@"angle-mask"] circleImage];
就可以得到一個圓角圖片。

利用CoreGraphics 對圖片進(jìn)行剪裁
// 開啟圖形上下文
UIGraphicsBeginImageContextWithOptions(joke.pictureFrame.size, YES, 0.0);
// 將下載完的image對象繪制到圖形上下文
CGFloat width = joke.pictureFrame.size.width;
CGFloat height = width * image.size.height / image.size.width;
[image drawInRect:CGRectMake(0, 0, width, height)];
// 獲得圖片
self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 結(jié)束圖形上下文
UIGraphicsEndImageContext();
其實(shí)這個原理與上面類似,我們看到大圖顯示部分可以通過這個方法實(shí)現(xiàn)。
