iOS學習——Quartz2D學習(1)

来源:https://www.cnblogs.com/mukekeheart/archive/2018/07/20/9340570.html
-Advertisement-
Play Games

Quartz2D學習(1) 本文以問答形式主要講述Quartz2D的相關內容,參考內容是網上下載的學習視頻資料。 1、什麼是Quartz2D? 他是一個二維的繪圖引擎,同時支持iOS和Mac系統 2、Quartz2D能完成的工作 畫基本線條,繪製文字,圖片,截圖,自定義UIView. 3、Quart ...


Quartz2D學習(1)

本文以問答形式主要講述Quartz2D的相關內容,參考內容是網上下載的學習視頻資料。

1、什麼是Quartz2D?

  他是一個二維的繪圖引擎,同時支持iOS和Mac系統 

2、Quartz2D能完成的工作

  畫基本線條,繪製文字,圖片,截圖,自定義UIView.

3、Quartz2D在開發中的價值

  當我們的控制項樣式極其複雜時,可以把控制項內部的結構給畫出畫,就是自定義控制項.

4、什麼是圖形上下文

圖形上下文是用來保存用戶繪製的內容狀態,並決定繪製到哪個地方的.

用戶把繪製好的內容先保存到圖形上下文,

然後根據選擇的圖形上下文的不同,繪製的內容顯示到地方也不相同,即輸出目標也不相同.

5、上下文的類型有哪些? 

圖形上下文的類型有:

Bitmap Graphics Context(點陣圖上下文)

PDF Graphics Context

Window Graphics Context 

Layer Graphics Context(圖層上下文,自定義UIView取得上下文就是圖層上下文.

UIView之所以能夠顯示就是因為他內部有一個圖層)

Printer Graphics Context

6.如何自定義UIView,步驟是什麼? 

首先得要有上下文,有了上下文才能決定把繪製的東西顯示到哪個地方去.CGContextRef ctx = UIGraphicsGetCurrentContext();

其次就是這個上下文必須得和View相關聯.才能將內容繪製到View上面.在DrawRect方法方法里

步驟:

1.要先自定定UIView

2.實現DrawRect方法

3.在DrawRect方法中取得跟View相關聯的上下文.

4.繪製路徑(描述路徑長什麼樣).

5.把描述好的路徑保存到上下文(即:添加路徑到上下文)

6.把上下文的內容渲染到View

7、DrawRect方法作用?什麼時候調用.

DrawRect作用:專用在這個方法當中繪圖的.只有在這個方法當中才能取得跟View相關聯的上下文.

DrawRect是系統自己調用的, 它是當View顯示的時候自動調用.

8、畫線(基本步驟描述) 

//1.獲取跟View相關聯的上下文 
CGContextRef ctx = UIGraphicsGetCurrentContext();
//2.繪製路徑
UIBezierPath *path = [UIBezierPath bezierPath];
  //2.1設置起點
    [path moveToPoint:CGPointMake(10, 125)];
     //2.2添加一根線到某個點
    [path addLineToPoint:CGPointMake(200, 125)];
//3.把路徑添加到上下文
CGContextAddPath(ctx,path.CGPath);
//4.把上下文的內容渲染到View上面.
CGContextStrokePath(ctx);

9、 想要再添加一根線怎麼辦?

第一種方法:重新設置起點,添加一根線到某個點,一個UIBezierPath路徑上面可以有多條線.

第二種方法:直接在原來的基礎上添加線.把上一條的終點當做下一條線的起點.添加一根線到某個點直接在下麵addLineToPoint:

10、怎麼樣設置線的寬度,顏色,樣式?

設置這些樣式,我們稱為是修改圖形上下文的狀態.

設置線寬:CGContextSetLineWidth(ctx, 20);

設置線段的連接樣式: CGContextSetLineJoin(ctx, kCGLineJoinRound);

添加頂角樣式:CGContextSetLineCap(ctx, kCGLineCapRound);

設置線的顏色: [[UIColor redColor] setStroke];

11、如何畫曲線?

畫曲線方法比較特殊需要一個控制點來決定曲線的彎曲程度.畫曲線方法為:

//先設置一個曲線的起點
[path moveToPoint:CGPointMake(10, 125)];
//再添加到個點到曲線的終點.同時還須要一個controlPoint(控制項點決定曲線彎曲的方法程式)
[path addQuadCurveToPoint:CGPointMake(240, 125) controlPoint:CGPointMake(125, 10)];

12、如何畫矩形,圓角矩形?

畫矩形直接利用UIBezierPath給我們封裝好的路徑方法bezierPathWithRect:CGRectMake(x, y, width,height) 

(x,y)點決定了矩形左上角的點在哪個位置
(width,height)是矩形的寬度高度    

圓角矩形的畫法多了一個參數,cornerRadius, bezierPathWithRoundedRect: cornerRadius:

cornerRadius它是矩形的圓角半徑.

通過圓角矩形可以畫一個圓.當矩形是正方形的時候,把圓角半徑設為寬度的一半,就是一個圓.

bezierPathWithRoundedRect:CGRectMake(10, 100, 50, 50) cornerRadius:25

13、如果畫橢圓,圓?

     畫橢圓的方法為:bezierPathWithOvalInRect:CGRectMake(x, y, width,height) 

前兩個參數(x,y)分別代碼圓的圓心

後面兩個參數(width,height)分別代表圓的寬度,與高度.

     寬高都相等時,畫的是一個正圓, 不相等時畫的是一個橢圓

     bezierPathWithOvalInRect:CGRectMake(10, 100, 50, 50)

14、如何利用渲染BezierPath對象的內容?

當創建一個UIBezierPath對象之後,我們可以使用它的strokefill方法在current graphics context中去渲染它,這兩個方法的底層的實現就是獲取上下文拼接路徑,把路徑添加到上下文,渲染到View。在調用這些方法之前,我們要進行一些其他的任務去確保正確的繪製path,以及path的設置。 使用UIColor類的方法去stroke和fill想要的顏色。 使用strokefill方法進行渲染時,不需要我們手動去獲取上下文了,這兩個方法會自定獲取view的上下文,然後在該view上繪製渲染path對應的路徑,stroke是繪製線,fill是填充path對應的封閉區域。
//設置矩形路徑 path
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(10, 100, 50, 50)];
//設置邊框顏色
[[UIColor greenColor] setStroke];
//設置填充顏色
[[UIColor redColor] setFill];
//設置邊框的線寬
path.lineWidth = 5;
//畫邊框
[path stroke];
//填充內部
[path fill]; 

15、如何畫圓弧?

  首先要確定圓才能確定圓弧圓孤它就圓上的一個角度嘛還是使用UIBezierPath的自帶的初始化方法。bezierPathWithArcCenter:(CGPoint) radius:(CGFloat) startAngle:(CGFloat) endAngle:(CGFloat) clockwise:(BOOL)

  center:圓心

        radius:圓的半徑

        startAngle:起始角度

        endAngle:終點角度

        clockwise:Yes順時針,No逆時針

註意:startAngle角度的位置是從圓的最右側為0度,即時鐘的三點鐘方向為起點

//逆時針畫一個半圓
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(125, 125) radius:100 startAngle:0 endAngle:M_PI clockwise:NO];
[path stroke];
        
//4分之1圓孤
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(125, 125) radius:100 startAngle:0 endAngle:-M_PI_2 clockwise:NO];
 [path stroke];

16、如何畫扇形

扇形就是在圓弧的基礎上進行填充,但是填充需要一個封閉的路徑才能填充,所以畫扇形的方法為:

1.先畫一個圓弧

2.再添加一個一根線到圓心:

3.然後封閉路徑:[path closePath],該方法會自動從路徑的終點到路徑的起點封閉起來,形成一個封閉的路徑

4.最後進行填充:[path fill]; 

//畫1/4圓示例
//畫圓弧
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(125, 125) radius:100 startAngle:0 endAngle:-M_PI_2 clockwise:NO];
//添加一根線到圓心
[path addLineToPoint:CGPointMake(125, 125)];
//關閉路徑,從路徑的終點到路徑的起點
[path closePath];
//畫扇形邊框
[path stroke];
//用填充的話,它會預設做一個封閉路徑,從路徑的終點到起點. 
[path fill];

 

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.概述 在前幾章介紹過 sql server 性能調優資源等待之PAGEIOLATCH,PAGEIOLATCH是出現在sql server要和磁碟作交互的時候,所以加個IO兩個字。這次來介紹PAGELATCH。PAGELATCH類型是sqlserver在緩衝池裡的數據頁面上經常加的另一類latch ...
  • 怎麼盜別人的微信號密碼最簡單方法與軟體及如何盜取對方的微信密碼? 微信可以說是十分重要的一個社交軟體,隨著用戶數量日益增多,人們在生活和中工作中往往離不開微信。但是關於微信的一些話題曾出不窮,甚至讓人防不勝防。因為稍不留神微信號便會被盜,所以只要是使用微信的朋友,在收到僵屍粉的同時,一定要儘快將其清 ...
  • 揭曉黑客步驟:盜微信號密碼最簡單方法與軟體以及怎麼盜取微信密碼? 隨著信息時代的來臨,很多人使用上了微信,微信的出現使得人們的生活變的十便利。人們不僅在工作中使用它,在社交中也讓其發揮了重要的作用。微信現在已經漸漸成為了人們生活中不能缺少的一部分。使用微信除了其方便快捷性之外,其賬號的安全性也引發了 ...
  • Android性能優化學習 最近公司主抓性能優化工作,藉此春風也學習到了許多Android性能優化方面的知識。由於組內隊友的給力,優化的成果也是比較喜人。同時也學習和實踐了不少知識,特此記錄。 1.性能優化分析工具學習 在開始代碼優化之前,先得學會使用性能分析工具。以下三個工具都是谷歌官方推出的,可 ...
  • 什麼是過度繪製(OverDraw) 在多層次重疊的UI結構裡面,如果不可見的UI也在做繪製的操作,會導致某些像素區域被繪製了多次。這樣就會浪費大量的CPU以及GPU資源。過度繪製最直觀的影響就是會導致APP卡頓。還好系統有提供GPU過度繪製調試工具會在屏幕上用不同的顏色,來表明一個像素點位被重覆繪製 ...
  • 在開發中,我們在啟動app的時候,屏幕會出現一段時間的白屏或者黑屏,不同設備時間長短不同。很影響用戶體驗。 首先分析一下,產生這個現象的原因,當我們在啟動一個應用時,系統會去檢查是否已經存在這樣一個進程,如果不存在,就是冷啟動。系統和APP本身都有很多工作需要處理。首先系統的服務會先檢查startA ...
  • MVP模式 概念就不說了,大家都懂。View層通過Persenter層相互通信,避免了View中大量的業務代碼,而將其提取到Model中。其實簡單的來說,就是通過介面回調,把業務分離出去。提高代碼的可讀性和已維護性。 直接看案例就明白了。 案例(用戶登錄) 常規的用戶登錄寫法就是Activity(f ...
  • 1、Keychain 淺析 2、iOS的密碼管理系統 Keychain的介紹和使用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...