update: Xcode 8.2.1 • 斯威夫特 3.0.2
您可以添加此扩展来分割图像:
extension UIImage {
var topHalf: UIImage? {
cgImage?.cropping(
to: CGRect(
origin: .zero,
size: CGSize(width: size.width, height: size.height / 2)
)
)?.image
}
var bottomHalf: UIImage? {
cgImage?.cropping(
to: CGRect(
origin: CGPoint(x: .zero, y: size.height - (size.height/2).rounded()),
size: CGSize(width: size.width, height: size.height - (size.height/2).rounded())
)
)?.image
}
var leftHalf: UIImage? {
cgImage?.cropping(
to: CGRect(
origin: .zero,
size: CGSize(width: size.width/2, height: size.height)
)
)?.image
}
var rightHalf: UIImage? {
cgImage?.cropping(
to: CGRect(
origin: CGPoint(x: size.width - (size.width/2).rounded(), y: .zero),
size: CGSize(width: size.width - (size.width/2).rounded(), height: size.height)
)
)?.image
}
}
extension CGImage {
var image: UIImage { .init(cgImage: self) }
}
游乐场测试:
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let imgURL = URL(string: "https://i.stack.imgur.com/Xs4RX.jpg")!
URLSession.shared.dataTask(with: imgURL) { data, response, error in
guard
let data = data, let image = UIImage(data: data)
else { return }
let topHalf = image.topHalf
let bottomHalf = image.bottomHalf
let topLeft = topHalf?.leftHalf
let topRight = topHalf?.rightHalf
let bottomLeft = bottomHalf?.leftHalf
let bottomRight = bottomHalf?.rightHalf
}.resume()