繁体   English   中英

使用UIViewContentModeScaleAspectFit在UIImageView中调整图像

[英]Fit image in UIImageView using UIViewContentModeScaleAspectFit

我面临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];

这是一张比较这两个结果的图片: 在此处输入图片说明

非常感谢您的帮助。

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

这是因为在第二种情况下,快照映像本身就是您所看到的大小 因此,图像不会被相应地拉伸或拟合。 较早的图像适合显示在屏幕上,因为图像大于图像imageview但比率与图像不同或相同。

但是不适合imageview的图像本身具有如此大的尺寸,即小于imageview的尺寸,因此它不适合边界。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM