5

インターネットで見つけたObjectiveCメソッドをSwiftに適応させていました(おそらくここでは覚えていません)。iPad Air用にビルドすると完全に動作しますが、iPad 2またはiPadで実行しようとするとRetina では 4 つのエラーが発生します (2 つの異なるエラー、それぞれ 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
}
4

2 に答える 2

5

どちらのエラーでも、新しい を作成してみてくださいCGFloat

CGFloat(0.5)
CFFloat(scaledWidth)
于 2014-06-15T22:19:56.043 に答える
0

これが発生する理由は、Double が 32 ビットの CGFloat に暗黙的にキャストされないためです。ただし、64ビットです。

var x:CGFloatアーキテクチャに関係なく、小数を含むすべての数値が Double になるため、暗黙的に推論する代わりに明示的な型を使用できます 。

于 2014-07-07T12:11:05.250 に答える