iOS開發_繪製圓角矩形虛線環

CH520發表於2024-05-27
- (void)drawRect:(CGRect)rect {
    
    // 獲取上下文(/畫筆/繪圖環境)
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 小段長度
    CGFloat line_dash = self.height / 20;
    
    // 虛線的樣式:長5 空隙15 長10 空隙30 長2 空隙20...
    //CGFloat lengths[] = {5, 15, 10, 30, 2, 20};
    CGFloat lengths[] = {line_dash, 2 * line_dash};
    /**
     * phase 開始點 跳過多少個點數(0代表從頭畫)
     * lengths 虛線的樣式
     * count 長度
    */
    // CGContextSetLineDash(<#CGContextRef c#>, <#CGFloat phase#>, <#const CGFloat *lengths#>, <#size_t count#>)
    CGContextSetLineDash(context, 1, lengths, sizeof(lengths) / sizeof(lengths[0]));
    // 在自身尺寸內縮排一點進行繪製
    CGFloat inset_offset = 2 * line_dash;
    
    CGRect frame = [self bounds:inset_offset];
    
    CGFloat org_x = frame.origin.x;
    CGFloat org_y = frame.origin.y;
    CGFloat size_w = frame.size.width;
    CGFloat size_h = frame.size.height;
    
    // 圓角半徑
    CGFloat radius = 2 * line_dash;
    // 線條的寬度
    CGContextSetLineWidth(context, line_dash / 5.f);
    // 設定線條顏色
    [[UIColor whiteColor] set];
    
    // 開始座標右邊開始
    CGContextMoveToPoint(context, org_x + size_w, org_y + size_h - radius);
    // 右下角角度
    CGContextAddArcToPoint(context, org_x + size_w, org_y + size_h, org_x + size_w - radius, org_y + size_h, radius);
    // 左下角角度
    CGContextAddArcToPoint(context, org_x, org_y + size_h, org_x, org_y + size_h - radius, radius);
    // 左上角
    CGContextAddArcToPoint(context, org_x, org_y, org_x + radius, org_y, radius);
    // 右上角
    CGContextAddArcToPoint(context, org_x + size_w, org_y, org_x + size_w, org_y + radius, radius);
    // 圓角矩形閉環
    CGContextClosePath(context);
    
    // 畫線
    CGContextStrokePath(context);
}

- (CGRect)bounds:(CGFloat)inset_offset {
    CGFloat org_x = inset_offset;
    CGFloat org_y = inset_offset;
    CGFloat size_w = self.width - 2 * inset_offset;
    CGFloat size_h = self.height - 2 * inset_offset;
    CGRect frame = CGRectMake(org_x, org_y, size_w, size_h);
    return frame;
}

相關文章