項(xiàng)目:圖片水印
- 獲取上下文票摇,之前的上下文都是在view的drawRect 方法中獲染行(跟view的layer相關(guān)聯(lián)的上下文)
- 怎么獲取位圖上下文,注意位圖上下文的獲取方式跟layer上下文不一樣矢门,需要我們手動(dòng)創(chuàng)建盆色。
- 步驟:
- 1.開(kāi)啟一個(gè)位圖上下文
- 2.繪制原生的圖片
- 3.給原生的圖片添加文字
- 4.生成一張圖片給我們,從上下文中獲取圖片
- 5.關(guān)閉上下文
// 開(kāi)啟一個(gè)位圖上下文祟剔,注意位圖上下文跟view無(wú)關(guān)聯(lián)隔躲,所以不需要在drawRect.
// size:位圖上下文的尺寸(新圖片的尺寸)
// opaque: 不透明度 YES:不透明 NO:透明,通常我們一般都弄透明的上下文
// scale:通常不需要縮放上下文物延,取值為0宣旱,表示不縮放
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
圖片裁剪
把正方性圖片重新生產(chǎn)一張圓形的圖片
初始的畫(huà)板上面沒(méi)有任何東西,是創(chuàng)建一個(gè)又一個(gè)路徑并往上面添加
- 步驟:
- 1.加載圖片
- 2.開(kāi)啟位圖上下文叛薯,跟圖片尺寸一樣大
- 3.設(shè)置原型裁剪區(qū)域浑吟,正切于圖片笙纤。創(chuàng)建原型的路徑,并把路徑設(shè)置為裁剪區(qū)域组力。
- 4.繪制圖片
- 5.從上下文中獲取圖片
- 6.關(guān)閉上下文
- 注意:在裁剪區(qū)域之前設(shè)置圓環(huán)省容。
- 使用分類(lèi),抽取代碼方法:返回裁剪的圖片燎字⌒冉罚可為UIImage 類(lèi)增加額外的方法,將代碼封裝起來(lái)轩触,復(fù)用寞酿。
屏幕截圖
用于分享圖片內(nèi)容家夺,炫耀裝B
- 步驟
- 1.開(kāi)啟位圖上下文
- 2.獲取上下文
- 3.將控件上的圖層渲染到上下文脱柱,layer只能渲染,不能繪制拉馋。但是字符串以及圖片均可以繪制榨为。
- 4.生成一張圖片
- 5.關(guān)閉上下文
- 將圖片保存到本地文件,并沒(méi)有直接的對(duì)象方法可以調(diào)用煌茴,需要將其轉(zhuǎn)化為NSData随闺,再寫(xiě)入文件,代碼如下
// image轉(zhuǎn)data
// compressionQuality: 圖片質(zhì)量 1:最高質(zhì)量
// PNG的圖片質(zhì)量較為清晰蔓腐,JPEG次之矩乐。
NSData *data = UIImageJPEGRepresentation(image,1);
[data writeToFile:@"/Users/xiaomage/Desktop/view.png" atomically:YES];
- 抽取代碼:返回屏幕截圖后的圖片,為UIImage 類(lèi)增加額外的功能回论。
圖片截取散罕、圖片擦除
- 圖片截取步驟:
- 給控制器的view 添加一個(gè) pan 手勢(shì)
- pan 行為發(fā)生的時(shí)候進(jìn)入處理函數(shù)
- 一開(kāi)始拖動(dòng)的時(shí)候
- 一直拖動(dòng)的時(shí)候
- 獲取結(jié)束點(diǎn)
- 獲取截取范圍
- 生成截屏的view,并將其添加至view中
- 拖動(dòng)結(jié)束的時(shí)候
- 開(kāi)啟上下文
- 設(shè)置裁剪區(qū)域
- 獲取上下文
- 把控件上的內(nèi)容渲染到上下文
- 生成一張新的圖片
- 關(guān)閉上下文
- 移除截屏的view
-
- 圖片擦除代碼如下:
- (void)pan:(UIPanGestureRecognizer *)pan
{
// 獲取當(dāng)前點(diǎn)
CGPoint curP = [pan locationInView:self.view];
// 獲取擦除的矩形范圍
CGFloat wh = 100;
CGFloat x = curP.x - wh * 0.5;
CGFloat y = curP.y - wh * 0.5;
CGRect rect = CGRectMake(x, y, wh, wh);
// 開(kāi)啟上下文
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 控件的layer渲染上去
[_imageView.layer renderInContext:ctx];
// 擦除圖片
CGContextClearRect(ctx, rect);
// 生成一張圖片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
_imageView.image = image;
// 關(guān)閉上下文
UIGraphicsEndImageContext();
}
手勢(shì)解鎖
- 按鈕的選中狀態(tài)與高亮狀態(tài)是不一樣的傀蓉。分別為:UIControlStateSelected\UIControlStateHighlighted欧漱。高亮狀態(tài)是按鈕點(diǎn)擊時(shí)候發(fā)生的,選擇狀態(tài)可以代碼設(shè)置葬燎。
- 為什么要在- (void)layoutSubviews布局子控件误甚,因?yàn)橹灰徽{(diào)用這個(gè)方法,就表示父控件的尺寸確定谱净。
- 從storyboard上也可以創(chuàng)建手勢(shì)窑邦,總共有7個(gè)。
項(xiàng)目:畫(huà)板
- 搭建界面
- 使用toolBar 控件壕探,添加UIBarButtonItem 模型冈钦。可以方便的對(duì)其內(nèi)容進(jìn)行布局管理浩蓉。
- 使用Flexible Bar Button Item 放在 UIBarButtonItem 之前派继,在toolBar控件frame改變的時(shí)候宾袜,起到一個(gè)彈簧的作用。
- 在 awakeFromNib:以及initWithFrame:都要進(jìn)行初始化設(shè)置驾窟,具有更好的擴(kuò)展性庆猫。
- 在使用drawRect:方法重新繪制屏幕時(shí),可以將貝瑟爾路徑定義在外面绅络,然后在drawRect:中執(zhí)行:[path stroke]方法也可月培。
-
只要調(diào)用drawRect:方法,就會(huì)把之前的內(nèi)容全部清空
恩急。
- UIImagePickerController 系統(tǒng)相冊(cè)控制器
- 通過(guò)設(shè)置控制器的來(lái)源:可以有相冊(cè)集\照片庫(kù)\相機(jī)
- 監(jiān)聽(tīng)用戶在系統(tǒng)相冊(cè)控制器的行為杉畜,需要設(shè)置delegate
- 使用位圖上下文來(lái)進(jìn)行畫(huà)圖截屏
- UIImageWriteToSavedPhotosAlbum:方法,可以將圖片寫(xiě)入至相冊(cè)衷恭,并可以監(jiān)聽(tīng)到是否保存完成此叠,保存完成的方法不能夠隨便亂寫(xiě),具體見(jiàn)官方說(shuō)明随珠。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者