亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS實現圓形圖片效果的兩種方法

2020-07-26 03:15:55
字體:
來源:轉載
供稿:網友

先來看看效果圖 ↓


這個顯示效果的做法有很多:

方法一: 使用兩張圖片, 作為邊框的背景圖片和中間的圖片,然后使用imageView的cornerRadius來做圓, 具體代碼如下:

backImageView.layer.cornerRadius = backImageView.frame.size.width / 2;backImageView.layer.masksToBounds = YES;frontImageView.layer.cornerRadius = frontImageView.frame.size.width / 2;frontImageView.layer.masksToBounds = YES;

但是很顯然, 今天的主角并不是上邊的方法.上邊的做法需要兩張圖片來完成帶邊框的圓形圖片,而接下來要介紹的方法并不需要兩張圖片, 只需要一張圖片就可以!

方法二: 使用圖形上下文, 生成一張帶有邊框的圓形圖片, 話不多說, 代碼如下:

// borderWidth 表示邊框的寬度CGFloat imageW = image.size.width + 2 * borderWidth;CGFloat imageH = imageW;CGSize imageSize = CGSizeMake(imageW, imageH);UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);CGContextRef context = UIGraphicsGetCurrentContext();// borderColor表示邊框的顏色[borderColor set];CGFloat bigRadius = imageW * 0.5;CGFloat centerX = bigRadius;CGFloat centerY = bigRadius;CGContextAddArc(context, centerX, centerY, bigRadius, 0, M_PI * 2, 0);CGContextFillPath(context);CGFloat smallRadius = bigRadius - borderWidth;CGContextAddArc(context, centerX, centerY, smallRadius, 0, M_PI * 2, 0);CGContextClip(context);[image drawInRect:CGRectMake(borderWidth, borderWidth, image.frame.size.width, image.frame.size.height)];UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();

接下來解釋一下上邊的代碼

1、首先是原理: 畫一個圓環, 寬度為borderWidth,然后將圖片放入這個圓環中, 使其只顯示圓環中的部分.

2、前三行代碼: 得到帶邊框的圖片的整體寬度和高度(因為要得到圓形圖片, 所以需要寬和高相同), 同時得到一個CGSize對象留著后邊用

3、代碼:

UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);

表示開啟圖形上下文, 我們來看一些頭文件中的方法聲明:

UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)

第一個參數需要填入一個CGSize對象, 也就是第三行的imageSize,表示繪制圖形的范圍

第二個參數的布爾值表示是否透明, 選擇NO即可

If the opaque parameter is YES, the alpha channel is ignored and the bitmap is treated as fully opaque

第三個參數的scale是比例因子, 我們填入0.0, 表示是以屏幕的比例來計算

If you specify a value of 0.0, the scale factor is set to the scale factor of the device's main screen

4、代碼:

CGContextRef context = UIGraphicsGetCurrentContext();

既然要使用上下文來繪制圖片, 當然得獲取當前的上下文對象了

5、代碼:

[borderColor set];

先來看一下這個set的頭文件注釋

// Sets the fill and stroke colors in the current drawing context

給當前的上下文設置填充和描邊的顏色, 說起填充色有沒有想到畫圖軟件中的填充 ?使用過PS的朋友應該很清楚.說白了這行代碼的意思就是設置好顏色, 待會給圓環上色用...

6、代碼:

CGFloat bigRadius = imageW * 0.5;CGFloat centerX = bigRadius;CGFloat centerY = bigRadius;CGContextAddArc(context, centerX, centerY, bigRadius, 0, M_PI * 2, 0);

正常來講畫一個圓需要什么 ? 需要半徑和圓心對不對

bigRadius 是帶邊框圖片整體的繪制半徑, 畫圓需要半徑, 這個就是!

centerX centerY 是圓心坐標的x和y

CGContextAddArc 這個方法表示給當前的上下文畫一個圓弧, 我們來看下頭文件的方法聲明

void CGContextAddArc(CGContextRef cg_nullable c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)

參數比較多, 我分別列出來其表示的意義:

     @param c 上下文

     @param x 圓弧中心點的x

     @param y 圓弧中心點的y

     @param radius 圓弧的半徑(bigRadius)

     @param startAngle 起始點的角度

     @param endAngle 結束點的角度 M_PI * 2表示一周

     @param clockwise 順時針畫圓弧填1 逆時針填0

7、代碼:

CGContextFillPath(context);

填充當前上下文, 用什么填充 ? 當然是填充色! 到這里我們得到了一個半徑為bigRadius, 顏色為填充色的圓形上下文

8、代碼:

CGFloat smallRadius = bigRadius - borderWidth;CGContextAddArc(context, centerX, centerY, smallRadius, 0, M_PI * 2, 0);

意義和 -代碼6- 一樣, 給當前的上下文(一個有顏色的圓)添加一個圓弧, 其中的smallRadius就是中間圖片的半徑

9、代碼:

CGContextClip(context);

頭文件是這么說的: Intersect the context's path with the current clip path and use the
resulting path as the clip path for subsequent rendering operations.

大意是將當前的上下文以當前的剪輯路徑(代碼8所畫的圓弧)進行剪輯, 然后使用剪輯后的路徑(代碼8得到的圓弧)來進行后續的著色操作.

簡單說就是使用 -代碼7- 得到的圓形上下文中間的部分來進行后續的繪制...

10、代碼:

[image drawInRect:CGRectMake(borderWidth, borderWidth, image.frame.size.width, image.frame.size.height)];

這個方法是將圖片以給定的范圍繪制到當前的圖形上下文中, -代碼9- 中已經得到了進行繪制操作的路徑, 也就是說, 這張圖只保留 -代碼9- 中路徑內的部分. 注意此時上下文已經變成了帶邊框的圓形圖片了!

11、代碼:

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();

從當前上下文中得到圖片并關閉圖形上下文

到這里呢就算是結束了, 我們得到了一個帶有邊框的圓形圖片, 從方法復雜性來說方法二比較復雜, 使用了圖形上下文. 但是就得到圓形圖片來說他們的意義不同.

方法一是用疊加的原理得到視覺上的帶邊框

方法二則完全生成了一張帶邊框的圓形圖片

結束語

在日常開發中完成某項功能需要根據需求去決定如何實現, 同樣的, 上邊的兩種方法也是, 如果想要一張自帶邊框的圓形圖片使用方法二即可,以上就是本文的全部內容,希望對大家開發學習能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合色综合久久综合频道88| 4388成人网| 色多多国产成人永久免费网站| 黄色精品一区二区| 国产精品爽爽ⅴa在线观看| 欧美日韩黄色大片| 国产日韩中文在线| 中文在线资源观看视频网站免费不卡| 欧美日韩国产中文字幕| 免费97视频在线精品国自产拍| 777777777亚洲妇女| 国产精品女主播| 精品国产91久久久久久老师| 欧美激情高清视频| 俺去了亚洲欧美日韩| 91情侣偷在线精品国产| 国产在线999| 国产成人精品在线视频| 国产精品xxxxx| 国产精品丝袜久久久久久不卡| 亚洲精美色品网站| 亚洲综合日韩在线| 国产精国产精品| 国产在线不卡精品| 久久综合伊人77777蜜臀| 国产亚洲精品综合一区91| 亚洲黄色av网站| 欧美午夜片在线免费观看| 欧美福利视频在线观看| 国产精品视频区| 超碰91人人草人人干| 久久777国产线看观看精品| 国产一区二区在线播放| 久久色免费在线视频| 中文字幕亚洲一区二区三区五十路| 国内外成人免费激情在线视频网站| 欧美性猛交xxxx偷拍洗澡| 日本在线精品视频| 欧美乱人伦中文字幕在线| 亚洲人成网站色ww在线| 国产精品r级在线| 色综合久久天天综线观看| 国产在线高清精品| 亚洲午夜未删减在线观看| 国产成人精品电影久久久| 国产精品一区电影| 久久国产精品久久精品| 国产精品99久久久久久白浆小说| 国产日韩在线播放| 国产精品一区二区三区毛片淫片| 日韩欧美极品在线观看| 亚洲欧洲在线观看| 久久久久成人网| 亚洲高清久久久久久| 精品久久久久久久久久国产| 69视频在线免费观看| 欧美日韩在线视频观看| 亚洲第一二三四五区| 成人中心免费视频| 在线国产精品视频| 亚洲激情自拍图| 亚洲国产天堂网精品网站| 亚洲精品久久久久久久久久久久| 国产精品久久97| 日韩黄色高清视频| 国产精品电影网站| 精品国产依人香蕉在线精品| 日韩中文有码在线视频| 成人免费视频网| 欧美裸体xxxxx| 日韩成人在线视频网站| 日本中文字幕久久看| 日韩精品极品在线观看播放免费视频| 欧美成人免费播放| 国产成人亚洲综合91| 日韩福利视频在线观看| 亚洲人成在线观看网站高清| 欧美小视频在线| 亚洲成人亚洲激情| 九九九热精品免费视频观看网站| www.久久草.com| 国产一区二区三区三区在线观看| 国产精品老女人精品视频| 欧美激情一区二区三区成人| 欧美一区第一页| 成人女保姆的销魂服务| 欧美大片在线看免费观看| 日韩高清欧美高清| 国产在线视频不卡| 亚洲免费影视第一页| 国产一区二区日韩| 精品国模在线视频| 国产91精品高潮白浆喷水| 亚洲人高潮女人毛茸茸| 国产精品入口日韩视频大尺度| 亚洲欧美制服第一页| 久久影院免费观看| 国产成人a亚洲精品| 精品国产91久久久| 乱亲女秽乱长久久久| 97国产精品视频人人做人人爱| 正在播放欧美一区| 欧美日韩另类在线| 国语自产精品视频在线看一大j8| 国产日韩中文字幕在线| 亚洲欧美在线播放| 国产精品高潮呻吟久久av无限| 亚洲成人久久久| 中文国产成人精品久久一| 成人黄色av免费在线观看| 国产免费亚洲高清| 午夜精品久久久久久久99热| 91麻豆国产语对白在线观看| 国产精品影院在线观看| www日韩中文字幕在线看| 97色在线观看免费视频| 97久久精品人人澡人人爽缅北| 国产精品久久久久久久久久尿| 日韩在线观看网站| 亚洲美女视频网| 欧美电影在线免费观看网站| 欧美电影免费播放| 亚洲激情视频在线观看| 姬川优奈aav一区二区| 日韩极品精品视频免费观看| 欧美日韩在线视频一区| 亚洲欧洲av一区二区| 欧美性高潮床叫视频| 色偷偷av亚洲男人的天堂| 91九色蝌蚪国产| 欧美日韩免费观看中文| 欧美伊久线香蕉线新在线| 麻豆国产精品va在线观看不卡| 欧美亚洲一级片| 成人黄色av网| 亚洲精品一区二区久| 国产精品国模在线| 日本成熟性欧美| 色妞久久福利网| 91亚洲精品一区| 亚洲欧美在线播放| 亚洲乱码国产乱码精品精| 日韩欧美主播在线| 日本欧美精品在线| 中文字幕少妇一区二区三区| 亚洲一区中文字幕在线观看| 欧日韩在线观看| 欧美日韩高清在线观看| 亚洲国产精品久久久| 91av在线播放视频| 欧美色图在线视频| 高清一区二区三区日本久| 91欧美精品午夜性色福利在线| 国产一区二区黑人欧美xxxx| 欧美最猛黑人xxxx黑人猛叫黄| 日韩美女写真福利在线观看| 欧美老女人www| 色婷婷亚洲mv天堂mv在影片| 在线亚洲男人天堂| 欧美成人黑人xx视频免费观看| 欧美成人黄色小视频| 黑人巨大精品欧美一区免费视频| 国产精品1234| 一本色道久久88精品综合|