2012-07-02 25 views

回答

2

通過將UIImageView圖層渲染爲圖形上下文,有一種很快的骯髒方法可以做到這一點。

UIGraphicsBeginImageContext(self.bounds.size); 
[self.imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

您需要爲此導入<QuartzCore/QuartzCore.h>

另一種方法是做AspectFilling你自己的計算。

CGSize finalImageSize = CGSizeMake(300,300); 
CGImageRef sourceImageRef = yourImage.CGImage; 

CGFloat horizontalRatio = finalImageSize.width/CGImageGetWidth(sourceImageRef); 
CGFloat verticalRatio = finalImageSize.height/CGImageGetHeight(sourceImageRef); 
CGFloat ratio = MAX(horizontalRatio, verticalRatio); //AspectFill 
CGSize aspectFillSize = CGSizeMake(CGImageGetWidth(sourceImageRef) * ratio, CGImageGetHeight(sourceImageRef) * ratio); 


CGContextRef context = CGBitmapContextCreate(NULL, 
              finalImageSize.width, 
              finalImageSize.height, 
              CGImageGetBitsPerComponent(sourceImageRef), 
              0, 
              CGImageGetColorSpace(sourceImageRef), 
              CGImageGetBitmapInfo(sourceImageRef)); 

//Draw our image centered vertically and horizontally in our context. 
CGContextDrawImage(context, 
        CGRectMake((finalImageSize.width-aspectFillSize.width)/2, 
           (finalImageSize.height-aspectFillSize.height)/2, 
           aspectFillSize.width, 
           aspectFillSize.height), 
        sourceImageRef); 

//Start cleaning up.. 
CGImageRelease(sourceImageRef); 

CGImageRef finalImageRef = CGBitmapContextCreateImage(context); 
UIImage *finalImage = [UIImage imageWithCGImage:finalImageRef]; 

CGContextRelease(context); 
CGImageRelease(finalImageRef); 
return finalImage; 
0

從文檔:

UIViewContentModeScaleToFill

縮放內容通過必要時改變所述內容的高寬比 以適合其自身的尺寸。

你可以做數學。或者如果你感覺特別懶,有this黑客方式。

+0

我下臺投票是因爲? –

相關問題