iOS文字遮罩的實(shí)現(xiàn)及淺析


前言

最近忙著公司的項(xiàng)目纤壁,零零散散的功能以及Flutter的研發(fā),導(dǎo)致簡(jiǎn)書(shū)有兩年時(shí)間沒(méi)更新了。今天趁著閑暇時(shí)間饺窿,把前段時(shí)間項(xiàng)目里涉及到的遮罩拿出來(lái)分享碴里。網(wǎng)絡(luò)上的方式層出不窮甚至過(guò)于復(fù)雜沈矿,本人就帶來(lái)個(gè)簡(jiǎn)化后的實(shí)現(xiàn)方式(不是什么高超技術(shù),望大佬們高抬貴手哈)咬腋。


示意圖

遮罩前
遮罩后

實(shí)現(xiàn)方式

  1. UI布局
// 文字內(nèi)容底部漸變
UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 350, 200)];
[self.view addSubview:gradientView];
    
 // 文字內(nèi)容
UITextView *textView = [[UITextView alloc] initWithFrame:gradientView.bounds];
textView.backgroundColor = UIColor.clearColor;
textView.selectable = NO;
textView.textColor = UIColor.whiteColor;
textView.text = @"這是第1行文字羹膳。。根竿。\n這是第2行文字陵像。。寇壳。\n這是第3行文字醒颖。。壳炎。\n這是第4行文字泞歉。。。\n這是第5行文字腰耙。榛丢。。\n這是第6行文字挺庞。晰赞。。\n這是第7行文字选侨。宾肺。。\n這是第8行文字侵俗。锨用。。\n這是第9行文字隘谣。增拥。。\n這是第10行文字寻歧。掌栅。。\n這是第11行文字码泛。猾封。。\n這是第12行文字噪珊。晌缘。。\n這是第13行文字痢站。磷箕。。\n這是第14行文字阵难。岳枷。。\n這是第15行文字呜叫。空繁。。\n這是第16行文字朱庆。盛泡。。";
[gradientView addSubview:textView];
    
[self updateGradientLayer:gradientView];
  1. 實(shí)現(xiàn)漸變圖層
/// 更新漸變圖層
- (void)updateGradientLayer:(UIView *)gradientView {
    NSObject *transparent = (NSObject*)[UIColor.clearColor CGColor];
    NSObject *opaque = (NSObject*)[UIColor.blackColor CGColor];
    CALayer *maskLayer = [CALayer layer];
    maskLayer.frame = gradientView.bounds;
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = maskLayer.bounds;
    gradientLayer.colors = @[opaque, opaque, transparent];
    gradientLayer.locations = @[@(0), @(0.857), @(1)];
    gradientLayer.startPoint = CGPointMake(0.5, 0);
    gradientLayer.endPoint = CGPointMake(0.5, 1);
    [maskLayer addSublayer:gradientLayer];
    gradientView.layer.mask = maskLayer;
}

淺析

代碼其實(shí)還是很簡(jiǎn)單的椎工,一對(duì)父子關(guān)系的控件+漸變圖層的實(shí)現(xiàn)饭于,即可完成此功能蜀踏。接下來(lái)做個(gè)簡(jiǎn)單的分析:

  1. 給需要加遮罩效果的視圖增加一個(gè)父級(jí)View,為了讓此容器內(nèi)的所有控件都具有統(tǒng)一的遮罩效果掰吕;也是為了保證TextView能保持正常滾動(dòng)果覆。因?yàn)槿绻oTextView的layer增加遮罩的話,將會(huì)導(dǎo)致遮罩層跟著一起滾動(dòng)殖熟,影響實(shí)際效果局待。
  2. CAGradientLayer的編寫(xiě)。CAGradientLayer是個(gè)線性的圖層菱属,經(jīng)常用于漸變色效果钳榨。
    colors:漸變色的顏色節(jié)點(diǎn);
    locations:顏色節(jié)點(diǎn)的位置纽门,取值范圍[0,1]薛耻;
    startPoint、endPoint:起始點(diǎn)與結(jié)束點(diǎn)赏陵,可通過(guò)參數(shù)實(shí)現(xiàn)是水平饼齿、垂直還是斜向;
  3. layer.mask蝙搔。給gradientLayer增加一層遮罩缕溉。
    maskLayer透明的地方,gradientLayer就不會(huì)渲染吃型,而是變透明证鸥,顯示出gradientLayer之后的內(nèi)容;
    maskLayer不透明的地方勤晚,gradientLayer就會(huì)正常渲染枉层。

Demo

Github


多謝支持!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末运翼,一起剝皮案震驚了整個(gè)濱河市返干,隨后出現(xiàn)的幾起案子兴枯,更是在濱河造成了極大的恐慌血淌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件财剖,死亡現(xiàn)場(chǎng)離奇詭異悠夯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)躺坟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)沦补,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人咪橙,你說(shuō)我怎么就攤上這事夕膀⌒榈梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵产舞,是天一觀的道長(zhǎng)魂奥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)易猫,這世上最難降的妖魔是什么耻煤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮准颓,結(jié)果婚禮上哈蝇,老公的妹妹穿的比我還像新娘。我一直安慰自己攘已,他們只是感情好炮赦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著样勃,像睡著了一般眼五。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彤灶,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天看幼,我揣著相機(jī)與錄音,去河邊找鬼幌陕。 笑死诵姜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搏熄。 我是一名探鬼主播棚唆,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼心例!你這毒婦竟也來(lái)了宵凌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤止后,失蹤者是張志新(化名)和其女友劉穎瞎惫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體译株,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓜喇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歉糜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乘寒。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匪补,靈堂內(nèi)的尸體忽然破棺而出伞辛,到底是詐尸還是另有隱情烂翰,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布蚤氏,位于F島的核電站刽酱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瞧捌。R本人自食惡果不足惜棵里,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姐呐。 院中可真熱鬧殿怜,春花似錦、人聲如沸曙砂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸠澈。三九已至柱告,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笑陈,已是汗流浹背际度。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涵妥,地道東北人乖菱。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蓬网,于是被迫代替她去往敵國(guó)和親窒所。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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