You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS中如何绘制圆形?Swift实现外层圆形方法咨询

在iOS Swift中绘制外层圆形的几种方法

嘿,我来帮你搞定这个外层圆形的绘制!在iOS用Swift开发时,根据你使用的是UIKit还是SwiftUI,有几种简单靠谱的实现方式,我都给你整理好了:

方法一:UIKit 用 UIView 的 Layer 快速实现(适合纯色边框)

这是最省心的方式,适合只需要纯色边框的外层圆形:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建一个用于承载圆形的View
        let outerCircleView = UIView()
        outerCircleView.translatesAutoresizingMaskIntoConstraints = false
        outerCircleView.backgroundColor = .clear // 内部透明,只显示边框
        view.addSubview(outerCircleView)
        
        // 设置约束(比如让圆形居中,宽高200)
        NSLayoutConstraint.activate([
            outerCircleView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            outerCircleView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            outerCircleView.widthAnchor.constraint(equalToConstant: 200),
            outerCircleView.heightAnchor.constraint(equalToConstant: 200)
        ])
        
        // 关键:设置圆角为宽高的一半,变成圆形
        outerCircleView.layer.cornerRadius = 100 // 200/2
        outerCircleView.layer.masksToBounds = true
        // 设置外层边框的宽度和颜色
        outerCircleView.layer.borderWidth = 4
        outerCircleView.layer.borderColor = UIColor.systemBlue.cgColor
    }
}

划重点:如果用Auto Layout,不要在viewDidLoad里直接根据frame计算cornerRadius(此时frame还没确定),可以把cornerRadius的设置放到layoutSubviews()方法里:

override func layoutSubviews() {
    super.layoutSubviews()
    outerCircleView.layer.cornerRadius = outerCircleView.bounds.width / 2
}

方法二:UIKit 用 CAShapeLayer 实现(适合复杂边框)

如果需要渐变边框、虚线边框这类更定制化的效果,用CAShapeLayer会更灵活:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建圆形路径
        let circlePath = UIBezierPath(ovalIn: CGRect(x: 100, y: 100, width: 200, height: 200))
        
        // 创建ShapeLayer
        let circleLayer = CAShapeLayer()
        circleLayer.path = circlePath.cgPath
        circleLayer.fillColor = UIColor.clear.cgColor // 内部透明
        circleLayer.strokeColor = UIColor.systemGreen.cgColor // 边框颜色
        circleLayer.lineWidth = 4 // 边框宽度
        // 如果要虚线边框,加上这行:
        // circleLayer.lineDashPattern = [8, 4]
        
        view.layer.addSublayer(circleLayer)
    }
}

方法三:SwiftUI 实现(更简洁)

如果是用SwiftUI开发,一行代码就能搞定:

import SwiftUI

struct ContentView: View {
    var body: some View {
        // 外层圆形:stroke是边框,frame控制大小
        Circle()
            .stroke(Color.purple, lineWidth: 4)
            .frame(width: 200, height: 200)
            .background(Color.white) // 背景色根据需求调整
    }
}

如果需要更复杂的样式,比如渐变边框,可以用stroke(style:)结合LinearGradient:

Circle()
    .stroke(
        LinearGradient(gradient: Gradient(colors: [.red, .yellow]), startPoint: .top, endPoint: .bottom),
        lineWidth: 4
    )
    .frame(width: 200, height: 200)

内容的提问来源于stack exchange,提问作者Rahul Chopra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:13