你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 小知識-使用paintCode的需要注意的點

iOS 小知識-使用paintCode的需要注意的點

編輯:IOS開發綜合

我在使用paintCode的過程中遇到一些小坑,這裡總結下.

1.圖片選擇標准.

並不是所有的圖片都可以繪制.圖片的選擇要考慮用代碼繪制的成本.如果色塊和線條過多,耗費的人力和時間成本太高,可能就沒有必要了.實際工作中會讓UI提供svg格式的圖片,然後拖到paintCode中生成代碼.如果圖片過於負責,人物肖像,頭發,皮膚什麼的,直接放一張圖片也是可以的.最後就是生成圖片非常依賴貝塞爾曲線,以這個標准很容易衡量是否適合繪制.

2.自動生成代碼的使用

繪制的上下文
UIGraphicsGetCurrentContext();這個方法在drewRect等方法中直接使用沒有問題,但是直接調用創建圖片的時候會出現問題,解決方法是自己創建一個上下文.
UIGraphicsBeginImageContextWithOptions(CGSizeMake(bounds.size.width, bounds.size.height),
false, [UIScreen mainScreen].scale);

繪制速度.
低端機型如4s會出現有的圖片繪制速度很慢,影響用戶體驗,因此可以放入後台或異步線程繪制.

圖片緩存.
一般來說,繪制是比較耗時的,繪制完成圖片會保存到本地,下次使用的時候先判斷有無該圖片,沒有才進行繪制.

3.示例代碼如下

//從文件中讀取圖片
CGRect bounds = CGRectMake(0, 0, 640, 720);
NSString *path = [self imagePathWithImageName:@"圖片名稱"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
if (image) {
     return image;
}
//如果文件不存在,則開始繪制.首先創建一個context    UIGraphicsBeginImageContextWithOptions(CGSizeMake(bounds.size.width, bounds.size.height), false, [UIScreen mainScreen].scale);
//獲取從paitCode自動生成的代碼
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat scale = [self scale];
CGContextScaleCTM(context, scale, scale);
CGContextSetAllowsAntialiasing(context, true);
CGContextSetShouldAntialias(context, true);

UIColor* color3 = [UIColor colorWithRed: 0.936 green: 0.936 blue: 0.936 alpha: 0.5];

CGContextSaveGState(context);
CGContextBeginTransparencyLayer(context, NULL);

//以下代碼是paintCode自動生成的
 UIBezierPath* bezierPath = UIBezierPath.bezierPath;
[bezierPath moveToPoint: CGPointMake(0.07, 0)];
...
bezierPath.usesEvenOddFillRule = YES;

[color3 setFill];
[bezierPath fill];


CGContextEndTransparencyLayer(context);
CGContextRestoreGState(context);

CGContextAddPath(context, bezierPath.CGPath);
//最後,將圖片保存到本地
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];

return image;
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved