CGContext理解 參考

2021-09-02 12:01:36 字數 2659 閱讀 4257

cgcontext又叫圖形上下文,相當於一塊畫布,以堆疊形式存放,只有在當前context上繪圖才有效。ios有分多種圖形上下文,其中uiview自帶提供的在drawrect:方法中通過uigraphicsgetcurrentcontext獲取,還有專門為處理的context,uigraphicsbeginimagecontext函式生成,還有pdf的context等等。

1.一共有3種使用context的場景,其中每種場景都有2種方法繪圖

場景1:

//通過uiview的子類的drawrect:在上下文中繪製,該方法系統已準備好乙個cgcontext,並放置在上下文棧頂,rect形參就是context的尺寸大小

//當乙個uiview的backgroundcolor為nil和opaque為yes時,產生的context的背景就為黑色的

- (void)drawrect:(cgrect)rect

layerdelegate* delegate = [[layerdelegate alloc]init];

calayer* layer = [calayer layer];

layer.anchorpoint = cgpointmake(0, 0);

layer.position = cgpointmake(100, 100);

layer.bounds = cgrectmake(0, 0, 200, 200);

layer.delegate = delegate;

//需要顯式呼叫setneedsdisplay來重新整理才會繪製layer

[layer setneedsdisplay];

[self.view.layer addsublayer:layer];

場景3:

//通過自己建立乙個context來繪製,通常用於對的處理

/*解釋一下uigraphicsbeginimagecontextwithoptions函式引數的含義:第乙個引數表示所要建立的的尺寸;第二個引數用來指定所生成的背景是否為不透明,如上我們使用yes而不是no,則我們得到的背景將會是黑色,顯然這不是我想要的;第三個引數指定生成的縮放因子,這個縮放因子與uiimage的scale屬性所指的含義是一致的。傳入0則表示讓的縮放因子根據螢幕的解析度而變化,所以我們得到的不管是在單解析度還是視網膜屏上看起來都會很好。

*///該函式會自動建立乙個context,並把它push到上下文棧頂,座標系也經處理和uikit的座標系相同

uigraphicsbeginimagecontextwithoptions(rect.size, no, 0);

cgcontextref context = uigraphicsgetcurrentcontext();

cgcontextaddellipseinrect(context, cgrectmake(0,0,100,100));

//填充顏色為藍色

cgcontextsetfillcolorwithcolor(context, [uicolor bluecolor].cgcolor);

//在context上繪製

cgcontextfillpath(context);

//把當前context的內容輸出成乙個uiimage

uiimage* i = uigraphicsgetimagefromcurrentimagecontext();

//上下文棧pop出建立的context

uigraphicsendimagecontext();

[i drawinrect:cgrectmake(0, 0, 100, 100)];

2.把整個螢幕轉化為

uiimageview* imagev = [[uiimageview alloc]initwithframe:cgrectmake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

uigraphicsbeginimagecontextwithoptions(imagev.frame.size, no, 0);

cgcontextref context = uigraphicsgetcurrentcontext();

//把當前的整個畫面匯入到context中,然後通過context輸出uiimage,這樣就可以把整個螢幕轉化為

[self.view.layer renderincontext:context];

uiimage* image = uigraphicsgetimagefromcurrentimagecontext();

imagev.image = image;

uigraphicsendimagecontext();

3.剪裁

//對一張進行剪裁

cgimageref imageref = cgimagecreatewithimageinrect(image.cgimage, cgrectmake(100, 100, 200, 50));

uiimageview* cropimage = [[uiimageview alloc]initwithframe:cgrectmake(100, 300, 200, 50)];

cropimage.image = [uiimage imagewithcgimage:imageref];

cgimagerelease(imageref);

[self.view addsubview:cropimage];

理解osi參考模型分層

對網路排錯指導 1物理層故障,檢視鏈結狀態,傳送和接收的資料報 2資料鏈路層故障,mac衝突,adsl欠費,網速沒辦法協商一致,計算機連線到錯誤的vlan 3網路層故障,配置錯誤ip位址,子網掩碼,配置錯誤的閘道器,路由器沒有配置到達目標網路的路由 4應用層故障,應用程式配置錯誤 參考模型與網路安全...

如何理解OSI參考模型

一 了解osi七層網路模型 二 了解資料傳輸的封裝和解封裝的過程 三 資料傳輸過程 1.應用層 2.傳輸層 3.網路層 4 資料鏈路層 5.物理層 意為開放式系統互聯。iso 國際標準化組織 於1984年1制定了osi open system interconnection 模型。這個模型把網路通訊...

Ubuntu 16 04 配置網橋 參考 理解

實測 ubuntu 18.04 配置網橋 也可以。新手一枚,純屬記錄。需要使用到 bridge utils.安裝 bridge utils sudo apt get install bridge utils建立網橋裝置 sudo brctl addbr br1其中br1是網橋名,應該可以隨便起.檢視...