[英]UIImageView content mode is not working
我有一個大圖像(1920 * 1080)和一個較小的UIImageView(320 * 568),在故事板上縮放到全屏尺寸。
現在我想顯示這個大圖像全屏大小,但適合UIImageView。
我已經嘗試了所有內容模式,但它們都無法正常工作。 每次它只顯示圖像的左上角全屏大小。
[self.imageView setFrame:self.view.bounds];
[self.imageView setContentMode:UIViewContentModeScaleAspectFit] ;
[self.imageView setImage:image] ;
[self.view insertSubview:_imageView aboveSubview:_previewView] ;
那么在我的情況下可能出現什么問題? 可能是Xcode故事板配置錯誤?
謝謝。
如果您只看到ImageView中的圖像頂角,則可能的原因是:您的ImageView幀超出屏幕大小或未設置內容模式。 在您的代碼中,您將框架設置為超級視圖的邊界。 如果您使用的是自動布局,請檢查自動布局是否設置正確。 如果沒問題,請在設置框架之前嘗試設置UIImageView ContentMode。
// Setting the content mode.
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
// Now set the frame.
[self.imageView setFrame:self.view.bounds];
其他解決方案是您可以縮小圖像以適合您的ImageView。 為此,您可以使用以下功能:
- (UIImage *)scaleImage:(UIImage *)orginalImage
{
float widthFactor = photoImageView.frame.size.width / orginalImage.size.width;
CGSize destinationSize = CGSizeMake(orginalImage.size.width * widthFactor,orginalImage.size.height * widthFactor);
UIGraphicsBeginImageContext(destinationSize);
[orginalImage drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
photoImageView.image = scaledImage;
return scaledImage;
}
有一個問題是CIImage以某種方式不尊重contentMode(至少在某些設備/ iOS版本上)。 將CIImage轉換為CGImage以使其工作。
Swift 3代碼:
func convertCIImageToCGImage(inputImage: CIImage) -> CGImage?
{
let context = CIContext(options: nil)
if let cgImage = context.createCGImage(inputImage, from: inputImage.extent)
{
return cgImage
}
return nil
}
嘗試這個
[self.imageView setFrame:self.view.bounds];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
self.imageView.clipsToBounds = YES;
[self.imageView setImage:image] ;
[self.view insertSubview:_imageView aboveSubview:_previewView] ;
工作正常.. :)
在我的情況下,我解決了這個刪除一些約束,調整我錯誤設置的imageview。
檢查您的imageview約束,嘗試刪除所有這些約束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.