2014-06-15 15 views
5

Mi stavo adattando a Swift un metodo ObjectiveC che ho trovato su internet (forse qui, non riesco a ricordarlo) e quando lo costruisco per iPad Air, funziona perfettamente, ma quando provo a farlo funzionare su un iPad 2 o iPad Retina dà 4 errori (2 errori diversi, ognuno due volte):Swift - Impossibile trovare un sovraccarico ... & Non è possibile convertire il tipo dell'espressione

/* 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 
} 
+0

Vedere questo: http://stackoverflow.com/a/24196575/716216 –

+0

possibile duplicato di [Inizializzatore Swift UIColor - Errore del compilatore solo quando si targetizza iPhone5s] (http://stackoverflow.com/questions/24196528/swift- uicolor-initializer-compiler-error-only-when-targeting-iphone5s) –

risposta

5

per entrambi gli errori, provare a creare nuovi CGFloat s .

CGFloat(0.5) 
CFFloat(scaledWidth) 
+0

Milioni di grazie! – rulilg

0

Il motivo per cui questo accade è perché di Double non è implicitamente colato a un CGFloat su 32bit. È comunque su 64 bit.

È possibile utilizzare tipi espliciti come var x:CGFloat invece di dedurre implicitamente poiché tutti i numeri con decimali diventano Double indipendentemente dall'architettura.