使用UIViewContentModeScaleAspectFit在UIImageView中拟合图像

时间:2015-11-24 10:30:05

标签: ios objective-c uiimageview uiimage

我正面临UIImageView的一个非常奇怪的问题,我试图将一个图像 - 通过当前视图的截图创建 - 设置为具有内容模式的ImageView是UIViewContentModeScaleAspectFit。

当我通过xib文件中的界面构建器设置图像或者设置由[UIImage imageNamed:]创建的图像时,它工作正常。他们都使用UIViewContentModeScaleAspectFit工作得很好。

但是当我拍摄视图的快照并将图像设置为图像视图时,图像不适合UIImageView。我已经尝试了我在这里找到的所有解决方案,比如.ClipsToBound = YES但是他们根本没有工作。我现在真的很困惑。

这是我拍摄屏幕截图并创建UIImage时的代码:

- (UIImage *)screenshotWithRect:(CGRect)captureRect
{
    CGFloat scale = [[UIScreen mainScreen] scale];
    UIImage *screenshot;

    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, scale);
    CGContextClipToRect (UIGraphicsGetCurrentContext(),captureRect);
    {
        if(UIGraphicsGetCurrentContext() == nil)
        {
            NSLog(@"UIGraphicsGetCurrentContext is nil. You may have a UIView (%@) with no really frame (%@)", [self class], NSStringFromCGRect(self.frame));
        }
        else
        {
            [self.layer renderInContext:UIGraphicsGetCurrentContext()];

            screenshot = UIGraphicsGetImageFromCurrentImageContext();
        }
    }
    UIGraphicsEndImageContext();

    return screenshot;
}

当我将图像设置为图像视图时

UIImage* snap = [[UIImage alloc] init];
// start snap shot
UIView* superView = [self.view superview];
CGRect cutRect = [superView convertRect:self.cutView.frame fromView:_viewToCut];
snap = [superView screenshotWithRect:cutRect];
[self.view addSubview:self.editCutFrameView];
// end snap shot -> show edit view
[self.editCutFrameView setImage:snap];

这里的图片比较了2个结果: enter image description here

非常感谢你的帮助。

更新:正如@Saheb Roy提到的尺寸一样,我检查了图像尺寸,它大约是400x500px,而thumbnail.png的尺寸是512x512px所以我认为& #39;与图像的大小无关。

1 个答案:

答案 0 :(得分:0)

这是因为在第二种情况下,快照图像本身正是您所看到的那个尺寸。因此,图像没有被拉伸或相应地适合。 由于图像大于imageview但图像的比例不同或相同,因此较早的图像会相应地适合屏幕。

但是它不适合imageview的那个,图像本身的尺寸很大,即小于图像视图的尺寸,因此它不适合边界。