iOS中鏤空效果

? 最近開發(fā)的app增加了一個(gè)新手引導(dǎo)的需求。為了實(shí)現(xiàn)這個(gè)需求需要界面鏤空掉一部分〔宸穑現(xiàn)在就說(shuō)下iOS中實(shí)現(xiàn)界面鏤空的基本原理。

首先我們實(shí)現(xiàn)iOS中鏤空我們要使用到layer的mask屬性舆驶。那這個(gè)mask指的是什么啦拓轻?我們可以查閱下蘋果的文檔瞬铸。


蘋果關(guān)于mask的說(shuō)明

意思就是layer不透明的部分才可以現(xiàn)實(shí)批幌,不透明的部分不可以顯示。這就是我們做鏤空效果的基礎(chǔ)嗓节。

?下一個(gè)問(wèn)題就是我們?cè)趺慈タ刂苐ayer的哪個(gè)部分顯示荧缘,哪個(gè)部分不顯示啦?我們就要用到貝塞爾曲線了拦宣。如果平時(shí)大家繪制過(guò)界面應(yīng)該都對(duì)貝塞爾曲線很熟悉截粗。下面我們就貼出iOS中鏤空的代碼信姓,大家看一看。

? UIWindow * window=[[[UIApplication sharedApplication] delegate] window];

?UIView *blackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kwidth, kheight)];

?UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, kwidth, kheight)];

?[path appendPath:[UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100) cornerRadius:0] ];

CAShapeLayer *layer = [CAShapeLayer layer]; ? ?

layer.path = path.CGPath;

[blackView.layer setMask:layer];

大家覺(jué)得這樣我們能實(shí)現(xiàn)鏤空效果了嗎绸罗?

答案是不能财破。但是為什么啦?其實(shí)第一次實(shí)現(xiàn)這個(gè)效果我就是這樣寫的代碼从诲。但是發(fā)現(xiàn)并沒(méi)有效果。后面查閱資料才知道為什么靡羡。其實(shí)就是繪圖的填充規(guī)則系洛。iOS的填充規(guī)則其實(shí)有兩種。一種叫非零環(huán)繞數(shù)原則略步,一種叫奇偶原則描扯。UIBezierPath有一個(gè)屬性叫做usesEvenOddFillRule,這個(gè)屬性是個(gè)Bool值趟薄。意思是是否使用奇偶原則绽诚。 默認(rèn)是NO。我們上面的代碼不成功的原因就是因?yàn)樘畛湟?guī)則的問(wèn)題杭煎。這兩個(gè)填充規(guī)則我也是在另外一篇文章中看到的恩够。寫的很詳細(xì)。大家一定要看了這篇文章繪圖的填充規(guī)則羡铲,再看下面的內(nèi)容蜂桶。不然也不能理解代碼。

文章詳細(xì)的說(shuō)明了界面哪些地方應(yīng)該繪制也切。哪些地方不能繪制扑媚。寫的很詳細(xì)±资眩看了之后我們就應(yīng)該知道上面代碼不能實(shí)現(xiàn)鏤空效果的原因了疆股。就是UIBezierPath的填充規(guī)則是默認(rèn)非零環(huán)繞原則。所以我們上面那樣的寫法還是繪制了frame的所有地方〉够保現(xiàn)在我們有兩種方法可以修改上面的代碼打到鏤空效果旬痹。第一種是

?[path appendPath:[[UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100)?cornerRadius:0]? bezierPathByReversingPath]];

關(guān)鍵就是bezierPathByReversingPath這個(gè)方法。這個(gè)方法其實(shí)就是將貝塞爾曲線繪制的起點(diǎn)和終點(diǎn)交換了位置讨越。這樣就可以滿足非零環(huán)繞原則唱凯,達(dá)到后面矩形區(qū)域里面的內(nèi)容不繪制了。

還是一種就是將usesEvenOddFillRule直接設(shè)為YES谎痢。就是我們奇偶原則磕昼。兩個(gè)path重疊的部分不進(jìn)行繪制。我們同樣也可以實(shí)現(xiàn)鏤空效果了〗谠常現(xiàn)在我們想要的鏤空效果就完成了票从。是不是明白了原理也不是很難漫雕。

學(xué)習(xí)代碼我們要多看官方文檔。多查閱資料峰鄙。這樣才能進(jìn)步的更快浸间。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吟榴,隨后出現(xiàn)的幾起案子魁蒜,更是在濱河造成了極大的恐慌,老刑警劉巖吩翻,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜看,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡狭瞎,警方通過(guò)查閱死者的電腦和手機(jī)细移,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熊锭,“玉大人弧轧,你說(shuō)我怎么就攤上這事⊥胍螅” “怎么了精绎?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锌妻。 經(jīng)常有香客問(wèn)我捺典,道長(zhǎng),這世上最難降的妖魔是什么从祝? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任襟己,我火速辦了婚禮,結(jié)果婚禮上牍陌,老公的妹妹穿的比我還像新娘擎浴。我一直安慰自己,他們只是感情好毒涧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布贮预。 她就那樣靜靜地躺著,像睡著了一般契讲。 火紅的嫁衣襯著肌膚如雪仿吞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天捡偏,我揣著相機(jī)與錄音唤冈,去河邊找鬼。 笑死银伟,一個(gè)胖子當(dāng)著我的面吹牛你虹,可吹牛的內(nèi)容都是我干的绘搞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼傅物,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼夯辖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起董饰,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒿褂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卒暂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啄栓,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年介却,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片块茁。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡齿坷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出数焊,到底是詐尸還是另有隱情永淌,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布佩耳,位于F島的核電站遂蛀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏干厚。R本人自食惡果不足惜李滴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛮瞄。 院中可真熱鬧所坯,春花似錦、人聲如沸挂捅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闲先。三九已至状土,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伺糠,已是汗流浹背蒙谓。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留训桶,地道東北人彼乌。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓泻肯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親慰照。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灶挟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前言:關(guān)于貝塞爾曲線與CAShapeLayer的學(xué)習(xí) 學(xué)習(xí)Demo演示: 貝塞爾曲線簡(jiǎn)單了解 使用UIBezier...
    麥穗0615閱讀 17,861評(píng)論 18 149
  • 轉(zhuǎn)載:http://www.reibang.com/p/32fcadd12108 每個(gè)UIView有一個(gè)伙伴稱為l...
    F麥子閱讀 6,168評(píng)論 0 13
  • Quartz2D以及drawRect的重繪機(jī)制字?jǐn)?shù)1487 閱讀21 評(píng)論1 喜歡1一、什么是Quartz2D Q...
    PurpleWind閱讀 762評(píng)論 0 3
  • >復(fù)雜的組織都是專門化的 >Catharine R. Stimpson 到目前為止毒租,我們已經(jīng)探討過(guò)`CALayer...
    夜空下最亮的亮點(diǎn)閱讀 1,004評(píng)論 0 2
  • 選她代表我自己的原因是稚铣,我希望自己可以這么開心的笑,而且她很瘦墅垮,我喜歡桿形的身材惕医,她是圓潤(rùn)筆直的
    66f7eee7a750閱讀 166評(píng)論 0 0