Core Graphics基礎(chǔ)和實踐

1. 概念

二維的繪圖庫。當控件樣式復(fù)雜時,可以把控件畫出來,就是自定義控件.

2. 基礎(chǔ)繪制流程

在drawRect方法中實現(xiàn)

  1. 獲取圖形上下文
    ? CGContextRef ctx = UIGraphicsGetCurrentContext();
  2. 畫貝塞爾曲線,可以畫各種形狀等
    ? UIBezierPath *path = [self arcBezierPath];
  3. 路徑添加到上下文中
    ? CGContextAddPath(ctx, path.CGPath);
  4. 渲染到視圖上
    ? CGContextStrokePath(ctx);

3. 基礎(chǔ)繪畫流程簡化

前兩步一樣,第三部直接用貝塞爾路徑渲染。它底層的實現(xiàn),就是獲取上下文,拼接路徑,把路徑添加到上下文,渲染到View

  1. 畫路徑,可以是線條曲線矩形圓等
    UIBezierPath *path = [self arcBezierPath];
  2. 直接用貝塞爾曲線繪制或填充
    [path stroke];

4. 下載進度條

用到了定時器CADisplayLink,刷新頻率60hz,也就是1秒鐘會執(zhí)行60次指定的selector

    self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];
    [self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

繪制的方法中,調(diào)整endAngle,就會出現(xiàn)動態(tài)的效果

    UIBezierPath *arcPath  = [UIBezierPath bezierPathWithArcCenter:CGPointMake(125, 125) radius:100 startAngle:0 endAngle:M_PI*2*self.proValue clockwise:YES];
    [arcPath setLineWidth:25];
    [[[UIColor blueColor] colorWithAlphaComponent:0.6] set];
    [arcPath stroke];

5. 畫餅圖

用貝塞爾畫圓弧,添加直線到圓心,設(shè)置顏色[[UIColor redColor] setFill],最后[path fill]

6. UIKit繪圖

這部分比較簡單,文字和圖片的繪制

7. 圖像上下文生成新的圖片

有著特定的步驟

  1. 開啟圖形上下文
    ? UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);

  2. 可以添加裁剪區(qū)域,然后執(zhí)行繪制圖片或者渲染layer等操作

        //裁剪區(qū)域
        UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, yellow.size.width, yellow.size.height)];
        [clipPath addClip];
        //圖片繪制
        [yellow drawAtPoint:CGPointMake(0, 0) blendMode:kCGBlendModeNormal alpha:1.0];
        //渲染layer
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
  3. 圖片上下文當中生成一張圖片
    ? UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

  4. 關(guān)閉上下文
    ? UIGraphicsEndImageContext();

8. 圖像擦除

CGContextClearRect(ctx, rect);

9. 其他Tips

  1. 查詢當前CGPoint或者CGRect是否在一個Frame內(nèi)

    CGRectContainsRect(button.frame, locationrect)

  2. 大作業(yè),制作一個繪畫板,用到的東西就是最基礎(chǔ)的東西,只要分步驟,一步一步實現(xiàn),就可以完成,大家試著自己做出來

    ?

10. 參考代碼地址 github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Quartz2D以及drawRect的重繪機制字數(shù)1487 閱讀21 評論1 喜歡1一、什么是Quartz2D Q...
    PurpleWind閱讀 916評論 0 3
  • 第一步:先科普一下基礎(chǔ)知識: Core Graphics是基于C的API,可以用于一切繪圖操作 Core Grap...
    真愛要有你才完美閱讀 2,520評論 0 1
  • 簡述: 1、Quartz2D是什么Quartz2D是二維繪圖引擎,同時支持IOS和Mac 2、Quartz2D能做...
    LitterL閱讀 731評論 0 6
  • Quartz2D 簡介 Quartz2D是二維(平面)的繪圖引擎(經(jīng)包裝的函數(shù)庫,方便開發(fā)者使用。也就是說蘋果幫我...
    iOS_Cqlee閱讀 675評論 0 2
  • 文字傳承著人類的經(jīng)驗,表達著人們的思想。一個人終將老去死亡,而思想通過文字得到永恒。從這個意義上說文字是人生命的延...
    時間與區(qū)間閱讀 661評論 0 0

友情鏈接更多精彩內(nèi)容