CALayer 給指定方向的控件邊框添加陰影

前言

相信大家在開發的過程中,都遇到過各式各樣的UI設計,最近開發項目的時候就遇到給指定方向的控件邊框添加陰影。話不多說,直接上圖吧。

圖1.png
圖2.png

分析需求

項目中用到的這個控件是一個自定義的UITextView,需要達到的需求就是有黑色的邊框,有圓角的處理,仔細看的小伙伴可以還發現了一個需求就是圖1的上邊框是帶陰影效果的,圖2的下邊框是帶陰影效果的。系統自帶的有設置陰影的,但是它是同時四邊一起設置,這就有點不符合我們的需求。那我們要怎么處理呢?

解決問題

系統的處理陰影的問題,是從控件的layer層去設置,我們的出發點也是抓住layer層去處理,自定義一個和控件的上邊界重合的layer,對它來進行設置。
我們用label來做實驗,先初始化一個lable,并進行簡單的設置:

//init lable
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMidX(self.view.frame) - 150, CGRectGetMidY(self.view.frame) - 20, 300, 40)];
    label.layer.borderWidth = 1.5;
    label.layer.borderColor = [UIColor blackColor].CGColor;
    label.layer.cornerRadius = 5;
    label.layer.masksToBounds = YES;
    [self.view addSubview:label];

效果如下:


圖3.png

接下來就是實現圖1 那樣的效果,上邊界帶陰影部分。

//set the shadow on the top edge
    CALayer *topLayer = [CALayer layer];
    topLayer.frame = CGRectMake(0, 1.5,label.frame.size.width,0.5);
    topLayer.shadowColor = [UIColor colorWithWhite:0.298 alpha:1.000].CGColor;
    topLayer.shadowOffset = CGSizeMake(0, 0.1);
    topLayer.shadowOpacity = 1;
    topLayer.shadowPath = [UIBezierPath bezierPathWithRect:topLayer.bounds].CGPath;
    [label.layer addSublayer:topLayer];

有圖有真相:

圖4.png

看起來不怎么明顯,設置陰影顏色為紅色:

圖5.png

下邊界也是同理去設置,就不繼續擼代碼了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,551評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,141評論 5 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,810評論 25 708
  • 內容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標下拉刷新...
    皇小弟閱讀 46,870評論 22 665
  • 她是一名三流大學出來的應屆畢業生。高考成績雖在意料之中,但知道分數的那一刻她還是忍不住哭了,明知道“理想很豐滿,現...
    涼菜饞閱讀 808評論 8 3