这是一组针对 OS X 和 iOS 上 Swift 的 CGRect
、CGPoint
和 CGSize
便利函数。
目标是提供清晰的函数来执行最常用的矩形操作,尽管代码节省很少。原因在于函数名称比使用即兴计算设置属性更能清楚地传达程序员的意图。
欢迎提交 Pull 请求和建议。
CGAffineTransform
的操作符这些示例也作为 Xcode 项目的 Playground 中可用。
import Foundation
import CGRectExtensions
let rect = CGRect(1, 2, 100, 200) // shorter constructor
let minY = rect.minY // shortcut properties
let topCenter = rect.topCenter // OS-dependent coordinate system
let oppositeOrigin = rect.origin + rect.size // adding
let corneredRect = rect.with(x: 0, y: 0) // modified copy
let nextPageRect = rect.offsetBy(dx: 100) // offsetting
let paddedRect = rect.insetBy(top: 66, left: 10, right: 10) // insetting
let quarterSize = rect.size * 0.5 // scaling sizes
let corner = rect.align(quarterSize, corner: .MinXEdge, .MinYEdge) // aligning sizes
let halfWidthSize = rect.size * (0.5, 1) // scaling sizes
let centeredRect = rect.center(halfWidthSize) // centering sizes
let scaledRect = rect * CGAffineTransformMakeScale(2.0, 3.0)
可变函数也可用。由于 Swift 允许直接修改 struct
属性,因此这些特别方便。
import Cocoa
import CGRectExtensions
let view = NSView()
view.frame.size = CGSize(width: 100, height: 200)
view.frame.bottomLeft = CGPoint(x: 1, y: 2)
view.frame.offsetInPlace(25, 25)
view.frame.insetInPlace(top: 66, left: 10, right: 10)
view.frame.centerInPlace(CGSize(50, 50))
view.frame.centerInPlace(CGSize(50, 50), alignTo: .MinXEdge)
view.frame.alignInPlace(CGSize(50, 50), corner: .MinXEdge, .MinYEdge)
view.frame *= CGAffineTransformMakeScale(2.0, 3.0)