iOS 使用Quartz 2D畫虛線

這里使用的函數為 CGContextSetLineDash,有四個參數 CGContextSetLineDash(<#CGContextRef _Nullable c#>, <#CGFloat phase#>, <#const CGFloat * _Nullable lengths#>, <#size_t count#>)

context – 這個不用多說

phase - 稍后再說

lengths – 指明虛線是如何交替繪制,具體看例子

count – lengths數組的長度

CGContextAddPath(ctx, rectPath.CGPath);
CGContextSetStrokeColorWithColor(ctx, [UIColor blackColor].CGColor);
CGContextSetLineWidth(ctx, 1.0);
CGFloat lengths[] = {5, 5};
CGContextSetLineDash(ctx, 0.0, lengths, 2); //1
CGContextStrokePath(ctx); 
(lengths)1.這里的lengths{5,5} 表示繪制5個點,跳過5個點
(5,5).png
(lengths)2.如果改為lengths{5,10,5} 就表示填充線條和非填充線條交錯, 先繪制5個點,跳過5個點,再繪制5個點, 跳過5個點, 繪制10個點
(5,,10,5).png
然后count很簡單,就是lengths的數組長度.
phase 這里指的是開始跳過的距離
CGFloat lengths[] = {10,5};  
CGContextSetLineDash(context, 0, lengths, 2);    
CGContextMoveToPoint(context, 0.0, 20.0);    
CGContextAddLineToPoint(context, 310.0, 20.0);     
CGContextStrokePath(context);  
                      
CGContextSetLineDash(context, 5, lengths, 2);  
CGContextMoveToPoint(context, 0.0, 40.0);    
CGContextAddLineToPoint(context, 310.0, 40.0);  
CGContextStrokePath(context);             
                                          
CGContextSetLineDash(context, 8, lengths, 2);     
CGContextMoveToPoint(context, 0.0, 60.0);             
CGContextAddLineToPoint(context, 310.0, 60.);             
CGContextStrokePath(context);   
phase.png

下圖為phase為0,5,8的不同情況 就是第一個的間隔
由于lengths值為{10,5},第一條線就是繪制10,跳過5,反復繪制。
第二條線的phase值為5,則首先繪制【10減去5】,再跳過5,繪制10,反復繪制。
第三條給也如此,先繪制2,再跳過5,如此反復。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容