我正在适应 Swift 一种我在互联网上找到的 ObjectiveC 方法(也许在这里,我不记得了),当我为 iPad Air 构建它时,它运行完美,但是当我尝试在 iPad 2 或 iPad 上运行它时Retina 它给出了 4 个错误(2 个不同的错误,每个错误两次):
/* Scale and crop image */
func imageByScalingAndCroppingForSize(#originalImage: UIImage, size:CGSize) -> UIImage {
let sourceImage = originalImage
var newImage: UIImage
let imageSize: CGSize = sourceImage.size
let width: Double = Double(imageSize.width)
let height: Double = Double(imageSize.height)
var targetWidth: Double = Double(size.width)
var targetHeight: Double = Double(size.height)
var scaleFactor: Double = 0.0
var scaledWidth: Double = targetWidth
var scaledHeight: Double = targetHeight
var thumbnailPoint: CGPoint = CGPointMake(0.0, 0.0)
if (imageSize != size) {
let widthFactor: Double = Double(targetWidth / width)
let heightFactor: Double = Double(targetHeight / height)
if (widthFactor > heightFactor) { // Scale to fit height
scaleFactor = widthFactor
}else{ // Scale to fit width
scaleFactor = heightFactor
}
scaledWidth = Double(width * scaleFactor)
scaledHeight = Double(height * scaleFactor)
// Center the image
if (widthFactor > heightFactor) {
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5 // Could not find an overload for '*' that accepts the supplied arguments
}else{
if (widthFactor < heightFactor) {
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5 // Could not find an overload for '*' that accepts the supplied arguments
}
}
}
UIGraphicsBeginImageContext(size)
var thumbnailRect: CGRect = CGRectZero
thumbnailRect.origin = thumbnailPoint
thumbnailRect.size.width = scaledWidth // Cannot convert the expression's type '()' to type 'CGFloat'
thumbnailRect.size.height = scaledHeight // Cannot convert the expression's type '()' to type 'CGFloat'
sourceImage.drawInRect(thumbnailRect)
newImage = UIGraphicsGetImageFromCurrentImageContext()
if (newImage == nil) {
println("could not scale image")
}
// pop the context to get back to the default
UIGraphicsEndImageContext()
return newImage
}