UIImageView内容模式不起作用

时间:2015-07-03 04:54:12

标签: ios objective-c uiimageview

我有一个大图像(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故事板配置错误吗?

感谢。

4 个答案:

答案 0 :(得分:4)

如果您只看到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;
}

答案 1 :(得分:3)

有一个问题是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
}

答案 2 :(得分:2)

试试这个

[self.imageView setFrame:self.view.bounds];
self.imageView.contentMode = UIViewContentModeScaleAspectFit; 
self.imageView.clipsToBounds = YES;
[self.imageView setImage:image] ;
[self.view insertSubview:_imageView aboveSubview:_previewView] ;

工作正常......:)

答案 3 :(得分:1)

在我的情况下,我解决了这个问题,删除了一些调整我错误设置的图像视图的约束。

检查您的imageview限制,尝试删除所有这些