我以编程方式在视图控制器上添加了uiview作为子视图(称为contentView)。我还以编程方式在该uiview上添加了一个图像。每次我在iPad上运行应用程序时,图像都会被拉伸!如何修复图像以使其适合iPad屏幕但不拉伸图像?我知道drawInRect
正在拉伸图像。那么我该如何解决这个问题呢?
这是我的代码:
UIGraphicsBeginImageContextWithOptions(self.contentView.bounds.size, self.contentView.opaque, 0.0);
[[UIImage imageNamed:@"menu image 2.JPG"] drawInRect:self.contentView.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.contentView addSubview:imageView];
答案 0 :(得分:2)
更改以下代码
UIImage *image = [UIImage imageNamed:@"menu image 2.JPG"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[self.contentView addSubview:imageView];
答案 1 :(得分:2)
UIImageView有一个名为contentMode
的属性,用于确定在视图上下文中如何处理图像布局。 contentMode
的类型为UIViewContentMode
。
默认值为UIViewContentModeScaleToFill
,可在不考虑宽高比的情况下拉伸图像。我假设正在改变长宽比导致问题。
如果您希望缩放图像,但保持纵横比,则有两种选择:
UIViewContentModeScaleAspectFit
:这将显示缩放图像以填充视图,但不会剪切任何内容(如果宽高比与视图大小不匹配,则会显示水平或垂直条带)
UIViewContentModeScaleAspectFill
:这会缩放图片以完全填充视图,而不会显示任何波段 - 如果图像比率与视图比率不匹配,则会导致内容被裁剪。
要在Objective-C中的图像视图上设置contentMode,请使用以下语法:
UIImage *image = [UIImage imageNamed:@"menu image 2.JPG"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.contentMode = UIViewContentModeScaleAspectFill;
...
您不应该使用自定义上下文绘图来继续工作(感谢Losiowaty向我询问此事)。
答案 2 :(得分:0)
我猜您的self.contentView.bounds
与菜单图片2.JPG 的宽高比不同。对于实验,请尝试查看菜单图像2.JPG 的分辨率。例如,如果它是300x150,则它的宽高比是(300/150 = 2:1)。将self.contentView.bounds设置为此纵横比并绘制图像并检查结果。它不会伸展。
答案 3 :(得分:-1)
请在项目中添加此单行代码
yourImage .contentMode = UIViewContentModeScaleAspectFit;