? ? ? ?在開發(fā)中圖片樣式會遇到圓型,此時的做法有兩種第一種直接調(diào)用系統(tǒng)的imageView的layer屬性:imageView.layer.cornerRadius 設(shè)置它的值等于imageView的一半.但是這樣做放在表格中十分消耗性能,所以不考慮,另外一種方法那就是繪制圖片,代碼如下:
-(UIImage *)dd_imageWithSize:(CGSize)size fillColor:(UIColor *)fillColor{
//開啟上下文
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
CGRect rect = CGRectMake(0, 0, size.width, size.height);
[fillColor setFill];
UIRectFill(rect);
//貝塞爾曲線
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect];
[path addClip];
//繪制圖像
[self drawInRect:rect];
//取得結(jié)果
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文
UIGraphicsEndPDFContext();
//返回結(jié)果
return result ;
}
通過模擬器的混合模式測試,圖片性能OK,但是我們還需要考慮到CPU運(yùn)行時間,通過在方法里面的第一步和最后一步調(diào)用方法CACurrentMediaTime(),得到方法的前后運(yùn)行時間
我們可以算出時間為0.026178秒,此時我考慮優(yōu)化,用多線程異步回調(diào)的方法代碼如下:
-(void)dd_imageWithSize:(CGSize)size fillColor:(UIColor *)fillColor completeBlock:(void(^)(UIImage *))completeBlock{
NSTimeInterval start = CACurrentMediaTime();
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//開啟上下文
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
CGRect rect = CGRectMake(0, 0, size.width, size.height);
[fillColor setFill];
UIRectFill(rect);
//貝塞爾曲線
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect];
[path addClip];
//繪制圖像
[self drawInRect:rect];
//取得結(jié)果
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文
UIGraphicsEndPDFContext();
//回到主線程
dispatch_async(dispatch_get_main_queue(), ^{
if (completeBlock !=nil) {
completeBlock(result);
}
});
});
NSLog(@"%f",CACurrentMediaTime()-start);
}
通過異步全局,完成圖片處理代碼,再把圖片處理結(jié)果的Block回調(diào),放在異步主隊列中.通過測試方法執(zhí)行的秒數(shù)為0.000045秒.