CGSize 是 Swift 和 Apple 平台(如 iOS 和 macOS)中的一个结构,用于表示二维空间中的尺寸(宽度和高度)。它是 Core Graphics 框架的一部分,通常用于指定某个视图或图形对象的大小。
定义
CGSize 是一个结构体,定义在 Core Graphics 中:
struct CGSize {
var width: CGFloat
var height: CGFloat
}
width: 表示宽度。
height: 表示高度。
它们的类型是 CGFloat,这是一个用于表示浮点值的类型。
创建 CGSize 实例
1、默认初始化
通过显式地指定宽度和高度来创建:
var size = CGSize(width: 100, height: 200)
2、使用零值
可以使用 .zero 创建一个宽度和高度都为 0 的 CGSize:
let zeroSize = CGSize.zero
// 等价于 CGSize(width: 0, height: 0)
3、使用常量
如果需要固定大小,可以直接使用常量:
let squareSize = CGSize(width: 50, height: 50)
常见用法
1、设置视图大小
在 SwiftUI 或 UIKit 中,可以使用 CGSize 设置视图的尺寸。
let frameSize = CGSize(width: 200, height: 100)
在 SwiftUI 中与 .frame 配合使用:
Rectangle()
.frame(width: frameSize.width,height: frameSize.height)

2、绘图和布局
在 Core Graphics 或 Core Animation 中,CGSize 常用于绘制操作,例如:
let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 100, height: 50))
3、调整尺寸
可以使用简单的数学操作调整 CGSize 的大小:
var size = CGSize(width: 50, height: 100)
size.width += 20
size.height *= 2
// size 现在是 CGSize(width: 70, height: 200)
属性和方法
1)属性
width: 尺寸的宽度。
height: 尺寸的高度。
zero: 一个宽高为 0 的静态常量。
2)方法
由于 CGSize 是一个结构体,支持算术运算或比较:
let size1 = CGSize(width: 50, height: 50)
let size2 = CGSize(width: 50, height: 50)
print(size1 == size2) // true
与其他结构的配合
1、与 CGRect 配合
CGSize 常与 CGRect 搭配,用于指定矩形的尺寸:
let rect = CGRect(origin: CGPoint(x: 10, y: 10), size: CGSize(width: 100, height: 50))
2、与 UIView 配合
在 UIKit 中可以用来设置视图的 bounds 或 frame:
let view = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 200, height: 100)))
示例:调整图片尺寸
假设有一个图片,需要根据比例调整其尺寸:
func resize(imageSize: CGSize, to targetWidth: CGFloat) -> CGSize {
let aspectRatio = imageSize.height / imageSize.width
return CGSize(width: targetWidth, height: targetWidth * aspectRatio)
}
let originalSize = CGSize(width: 400, height: 200)
let newSize = resize(imageSize: originalSize, to: 100)
print(newSize) // CGSize(width: 100.0, height: 50.0)
总结
CGSize 是一个非常基础但强大的结构,用于表示二维空间中的尺寸。无论是在布局还是绘图中,它都广泛应用,是开发 Apple 平台应用时不可或缺的工具。
