如何繪製 類似於氣泡帶小尖尖的view

2021-08-20 19:37:58 字數 2592 閱讀 3113

尖尖在矩形上邊

_arrowx表示小尖尖(即三角形中垂線的x) 

@inte***ce noteview : uiview

- (instancetype)initwithframe:(cgrect)frame witharrowx:(cgfloat)arrowx;

@property (nonatomic, strong) nsstring *contentstr;

@end

#import "noteview.h"

@inte***ce noteview ()

@property (nonatomic, assign) cgfloat arrowx;

@property (nonatomic, strong) uilabel *contentlabel;

@end

@implementation noteview

- (instancetype)initwithframe:(cgrect)frame witharrowx:(cgfloat)arrowx

return self;

}- (void)setcontentstr:(nsstring *)contentstr

- (void)drawrect:(cgrect)rect

- (void)drawborderwitharrowandarc

if (_arrowx > w - padding - factor * arrowh - r)

cgcontextbeginpath(context);

// 左上角起始點

cgcontextmovetopoint(context,padding + r, arrowh);

// 尖尖

cgcontextaddlinetopoint(context,_arrowx - factor * arrowh,arrowh);

cgcontextaddlinetopoint(context,_arrowx,0);

cgcontextaddlinetopoint(context,_arrowx + factor * arrowh,arrowh);

// 右上角 x需要 -r

cgcontextaddlinetopoint(context,w - padding - r,arrowh);

// 上下文、圓心x、圓心y、半徑、起始弧度、終止弧度、順時針還是逆時針

// 當clockwise為0表示順時針,從圓心水平向右為0弧度,向左為m_pi弧度,向下為m_pi_2,向上為-m_pi_2

// cgcontextaddarc(cgcontextref _nullable c, cgfloat x, cgfloat y, cgfloat radius, cgfloat startangle, cgfloat endangle, int clockwise)

cgcontextaddarc(context, w - padding - r, arrowh + r, r, -m_pi_2, 0, 0);

// 右下角 y需要 -r

cgcontextaddlinetopoint(context,w - padding,h - padding - r);

cgcontextaddarc(context, w - padding - r, h - padding - r, r, 0, m_pi_2, 0);

// 左下角 x需要 +r

cgcontextaddlinetopoint(context,padding + r,h - padding);

cgcontextaddarc(context, padding + r, h - padding - r, r, m_pi_2, m_pi, 0);

// 左上角 y需要 +r

cgcontextaddlinetopoint(context,padding,arrowh + r);

cgcontextaddarc(context, padding + r, arrowh + r, r, m_pi, -m_pi_2, 0);

[[uicolor whitecolor] setfill];

[[uicolor clearcolor] setstroke];

//設定陰影

// cgcontextsetshadowwithcolor(cgcontextref context, cgsize offset,cgfloat blur, cgcolorref color)

// context表示要作畫的內容

// offset表示陰影的位置

// blur表示陰影的模糊度

// color表示圖形要填充的顏色

cgcolorref shadowcolor = [[uicolor blackcolor] colorwithalphacomponent:0.3].cgcolor;

// 陰影偏移cgsizemake(1, 0)

cgcontextsetshadowwithcolor(context, cgsizemake(1, 0), 10, shadowcolor);

cgcontextdrawpath(context,kcgpathfillstroke);

}

pushd popd 類似於麵包屑

讓切換目錄更方便 pushd,popd,dirs,cd 一,為何要使用這幾個命令?可能大家會有疑問,為何要使用這幾個命令,難道用cd不就可以切換目錄了嗎?沒錯,使用cd就可以切換到需要訪問的目錄,但是有時會是乙個路徑很長,層次很多的目錄,進到此目錄下後,這時我們不小心執行了 cd命令,理所當然,我們...

位域 (類似於結構體)

位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區...

iOS 類似於App抖動效果

做法有很多 這裡利用關鍵幀動畫實現 懶載入方式建立乙個uiview,設定其內容為一張,給其新增長按手勢 uiview ditherin iew return ditherin iew self.view addsubview self.ditherin iew 複製 長按手勢 長按手勢響應事件 vo...