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

SwiftUI中如何通过ctx.draw函数调整绘制图片的尺寸?

调整SwiftUI GraphicsContext中绘制图片的尺寸

当然可以,你可以通过两种常用方式调整ctx.draw绘制的图片尺寸:

方法一:使用draw方法的scale参数

GraphicsContext的draw(_:at:anchor:scale:)方法支持直接传入缩放比例,按原图尺寸的比例缩小或放大。比如你的原图是80x80,要缩到30x30(适配父组件60x60的尺寸),可以设置scale: 0.375:

Image(
    size: CGSize(width: 60, height: 60),
    label: Text("Set Paid").foregroundStyle(Color.white).font(.caption)
) { ctx in
    ctx.draw(
        Image("icon-dollar"),
        at: CGPoint(x: 30, y: 0), // 调整x坐标让图片居中
        anchor: .top,
        scale: 0.375 // 80*0.375=30,刚好适配60x60容器的上半部分
    )
    
    ctx.draw(
        Text("Set Paid"),
        at: CGPoint(x: 30, y: 40), // 调整y坐标让文字在图片下方
        anchor: .top
    )
}

方法二:先调整图片尺寸再绘制

先对Image调用resizable()使其支持尺寸调整,再通过frame或scaledToFit()设置目标尺寸,最后传入draw方法:

Image(
    size: CGSize(width: 60, height: 60),
    label: Text("Set Paid").foregroundStyle(Color.white).font(.caption)
) { ctx in
    let resizedImage = Image("icon-dollar")
        .resizable()
        .scaledToFit()
        .frame(width: 30, height: 30)
    
    ctx.draw(
        resizedImage,
        at: CGPoint(x: 30, y: 0),
        anchor: .top
    )
    
    ctx.draw(
        Text("Set Paid"),
        at: CGPoint(x: 30, y: 40),
        anchor: .top
    )
}

两种方法的区别:

  • scale参数适合按比例快速缩放,无需提前处理图片;
  • 先调整尺寸的方式更灵活,能精确控制图片大小,还能配合scaledToFill等模式裁剪图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:43:09