2016-05-17 15 views
0

Im folgenden Code, auch kleine Bilder vergrößern und füllen Sie die gesamte Ansicht. Könnten Sie mir bitte helfen, das Bild im Originalzustand anzuzeigen?Bild ohne Skalierung anzeigen

override func drawRect(rect: CGRect) { 
    if let inputCIImage = inputCIImage { 
     clampFilter.setValue(inputCIImage, forKey: kCIInputImageKey) 
     blurFilter.setValue(clampFilter.outputImage!, forKey: kCIInputImageKey) 

     let rect = CGRect(x: 0, y: 0, width: drawableWidth, height: drawableHeight) 
     ciContext.drawImage(blurFilter.outputImage!, inRect: rect, fromRect: inputCIImage.extent)   
    } 
} 
+0

Wofür stehen die Variablen drawableWidth und drawableHeight? – Anokrize

Antwort

0

dachte ich, mit folgenden Ausweg:

func aspectFit(fromRect: CGRect, toRect: CGRect) -> CGRect { 
    let fromAspectRatio = fromRect.size.width/fromRect.size.height; 
    let toAspectRatio = toRect.size.width/toRect.size.height; 

    var fitRect = toRect 

    if (fromAspectRatio > toAspectRatio) { 
     fitRect.size.height = toRect.size.width/fromAspectRatio; 
     fitRect.origin.y += (toRect.size.height - fitRect.size.height) * 0.5; 
    } else { 
     fitRect.size.width = toRect.size.height * fromAspectRatio; 
     fitRect.origin.x += (toRect.size.width - fitRect.size.width) * 0.5; 
    } 

    return CGRectIntegral(fitRect) 
} 

func aspectFill(fromRect: CGRect, toRect: CGRect) -> CGRect { 
    let fromAspectRatio = fromRect.size.width/fromRect.size.height; 
    let toAspectRatio = toRect.size.width/toRect.size.height; 

    var fitRect = toRect 

    if (fromAspectRatio > toAspectRatio) { 
     fitRect.size.width = toRect.size.height * fromAspectRatio; 
     fitRect.origin.x += (toRect.size.width - fitRect.size.width) * 0.5; 
    } else { 
     fitRect.size.height = toRect.size.width/fromAspectRatio; 
     fitRect.origin.y += (toRect.size.height - fitRect.size.height) * 0.5; 
    } 

    return CGRectIntegral(fitRect) 
} 
func imageBoundsForContentMode(fromRect: CGRect, toRect: CGRect) -> CGRect { 
    switch contentMode { 
    case .ScaleAspectFill: 
     return aspectFill(fromRect, toRect: toRect) 
    case .ScaleAspectFit: 
     return aspectFit(fromRect, toRect: toRect) 
    default: 
     return fromRect 
    } 
} 

override func drawRect(rect: CGRect) { 
    if let inputCIImage = inputCIImage { 
     clampFilter.setValue(inputCIImage, forKey: kCIInputImageKey) 
     blurFilter.setValue(clampFilter.outputImage!, forKey: kCIInputImageKey) 

     let rect = CGRect(x: 0, y: 0, width: drawableWidth, height: drawableHeight) 

     let inputBounds = inputCIImage.extent 

     let targetBounds = imageBoundsForContentMode(inputBounds, toRect: rect) 

     ciContext.drawImage(blurFilter.outputImage!, inRect: targetBounds, fromRect: inputCIImage.extent) 




    } 
} 
0

Sie können die Größe des Bildes erhalten, wie wenn Ihr Bild

ist
let image = UIImage(named: "someImage.png") 

dann können Sie die Breite und Größe erhalten

print(image.size) 

und dann übergeben SI ze zu Ihrer benutzerdefinierten Ansicht, um die gewünschte Größe zu erreichen.