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
相关产品推荐
相关产品推荐

