UIBezierPath畫一個拱形的tabBar圖形

平時開發(fā)中經(jīng)常被要求使用一個帶拱形的tabBar,效果如下圖所示


效果圖.PNG

系統(tǒng)只帶的tabBar是一個固定高度的矩形View, 所以我們只能自定義一個UIView。

由于需要畫一個拱形,拱形即為一個半圓,所以首先想到的是使用貝塞爾曲線。如果沒有接觸過貝塞爾曲線可以先百度下相關(guān)知識,可能看的有點(diǎn)暈哈,都是數(shù)學(xué)介紹。但是不要擔(dān)心,蘋果已經(jīng)為我們封裝好了,我們只需要調(diào)用下API就可實現(xiàn)了。

既然是自定義一個UIView,我們還是從- (void)drawRect:(CGRect)rect這個函數(shù)開始,好了廢話不多說直接上代碼

- (void)drawRect:(CGRect)rect
{
    CGSize size = self.bounds.size;
    CGFloat w = size.width/NUM;
    CGFloat  radius = w / 2;
    CGFloat h = size.height - 49;
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(0, h)];
    [path addLineToPoint:CGPointMake(2*w, h)];
    
    [ path addArcWithCenter:CGPointMake(2*w + w/2 ,h) radius:radius  startAngle:M_PI endAngle:0 clockwise:YES];
    [path addLineToPoint:CGPointMake(size.width, h)];
    [path addLineToPoint:CGPointMake(size.width, size.height)];
    [path addLineToPoint:CGPointMake(0, size.height)];
    [path addLineToPoint:CGPointMake(0, h)];
    [path closePath];
    
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.path = path.CGPath;
    self.layer.mask = layer;
}

給我們自定義的UIView設(shè)置個Frame值

HTTringleView *VC = [[HTTringleView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height-49 - [UIScreen mainScreen].bounds.size.width/5,  [UIScreen mainScreen].bounds.size.width, 49 + [UIScreen mainScreen].bounds.size.width/5)];
[self.view addSubview:VC];

就可以實現(xiàn)一個帶拱形的tabBar了,就是這么簡單,這么任性!

帶拱形的Tabbar.png

是不是很簡單,關(guān)鍵就是找好6個關(guān)鍵點(diǎn)CGPointMake(0, h), CGPointMake(2w, h),CGPointMake(2w + w/2 ,h),CGPointMake(size.width, h),CGPointMake(size.width, size.height),CGPointMake(0, size.height)。

6個關(guān)鍵點(diǎn).png

不斷的利用UIBezierPath在這6個關(guān)鍵點(diǎn)之間畫線(addLineToPoint)和畫圓(addArcWithCenter)。

最后我把代碼上傳GitHub給有需要的同學(xué)參考下。

思考:
如何畫一個帶尖角的UIView?

帶尖角的UIView.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,267評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,688評論 6 30
  • 深入理解傅里葉變換Mar 12, 2017 這原本是我在知乎上對傅立葉變換、拉普拉斯變換、Z變換的聯(lián)系?為什么要進(jìn)...
    價值趨勢技術(shù)派閱讀 5,935評論 2 2
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,726評論 1 14
  • 關(guān)于tabBar這個控件,相信大家都不太陌生,基本上每個app都會用的到tab.但是,使用的情況卻不一定,根...
    深白色的熊閱讀 2,371評論 3 12

友情鏈接更多精彩內(nèi)容