2014-06-15 18 views
5

Przystosowałem się do Swift metody ObjectiveC, którą znalazłem w Internecie (może tutaj, nie pamiętam) i kiedy buduję ją na iPada powietrze, działa perfekcyjnie, ale gdy próbuję uruchomić go na iPada 2 lub iPad Retina to daje 4 błędy (2 różne błędy, każdy dwa razy):Swift - Nie można znaleźć przeciążenia ... & Nie można przekonwertować typu wyrażenia

/* 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

Zobacz: http://stackoverflow.com/a/24196575/716216 –

+0

możliwy duplikat [Swift UIColor initializer - kompilator Błąd tylko podczas kierowania na iPhone5s] (http://stackoverflow.com/questions/24196528/swift- uicolor-initializer-compiler-error-only-when-targeting-iphone5s) –

Odpowiedz

5

dla obu błędów, spróbuj utworzyć nowe CGFloat s .

CGFloat(0.5) 
CFFloat(scaledWidth) 
+0

Milionowe dzięki! – rulilg

0

Powodem tego jest fakt, że Double nie jest domyślnie rzutowany na CGFloat na 32bit. Jest jednak na 64bit.

Można używać typów jawnych, takich jak var x:CGFloat zamiast domyślnie wnioskować, ponieważ wszystkie liczby z dziesiętnymi stają się podwójne niezależnie od architektury.