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

iOS Swift中如何绘制如图所示的自定义曲线?

解决UIBezierPath实现顶部弧形底部视图的问题

问题分析

你的代码中draw(_:)方法的路径逻辑有误,导致曲线形状不符合预期。当前路径是从左下角到右下角,再曲线到左上角,无法形成顶部中间向上凸的弧形。同时commonInit()方法未被调用,会导致Nib加载失效。

修正方案

1. 重构UIBezierPath路径

要实现顶部中间向上凸的弧形,需按以下逻辑构建路径:

  • 从视图左下角出发,直线到左上角
  • 添加曲线连接到右上角,通过控制点让中间区域向上拱起
  • 直线回到右下角,最后闭合路径

2. 修复Nib加载逻辑

在两个初始化方法中调用commonInit(),确保Nib资源正确加载。

修正后的完整代码

import UIKit

class FooterView: UIView {

    @IBOutlet weak var footerImageView: UIImageView!

    override func draw(_ rect: CGRect) {
        let path = UIBezierPath()
        let fillColor = UIColor.blue
        
        let width = rect.size.width
        let height = rect.size.height
        // 弧形凸起高度,可按需调整
        let curveHeight: CGFloat = height * 0.2

        // 起点:视图左下角
        path.move(to: CGPoint(x: 0, y: height))
        // 直线到视图左上角
        path.addLine(to: CGPoint(x: 0, y: 0))
        // 添加曲线到视图右上角,控制点实现向上凸效果
        path.addCurve(to: CGPoint(x: width, y: 0), 
                      controlPoint1: CGPoint(x: width / 3, y: -curveHeight), 
                      controlPoint2: CGPoint(x: width * 2 / 3, y: -curveHeight))
        // 直线到视图右下角
        path.addLine(to: CGPoint(x: width, y: height))
        // 闭合路径
        path.close()

        fillColor.setFill()
        path.fill()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
        self.backgroundColor = .red
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
        self.backgroundColor = .yellow
    }

    private func commonInit(){
        Bundle.main.loadNibNamed("FooterView", owner: self, options: nil)
        // 若需显示图片,取消以下两行注释
        footerImageView.contentMode = .scaleAspectFill
        addSubview(footerImageView)
    }
}

关键说明

  • 控制点调整:curveHeight控制弧形凸起的高度,可根据视觉需求修改数值,改变弧形的弯曲程度。
  • 坐标系注意:UIKit坐标系y轴向下,因此向上凸起需要将控制点的y坐标设为负数,让曲线超出视图顶部边界,形成向上拱的视觉效果。
  • Nib加载:必须在两个初始化方法中调用commonInit(),否则自定义视图的Nib资源无法正确加载。

内容的提问来源于stack exchange,提问作者Dimpy-iRoid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:33:22