【发布时间】:2013-05-04 16:26:40
【问题描述】:
我有一个 1024 x 1 像素的 UIImage。此图像必须拉伸以填充 1024 x 50 像素的 UIImageView。
此图像最初加载到 NSArray 上,然后我这样做:
UIImage *image = nil;
if ([UIImage respondsToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) { // ios >= 6.0
image = [[myImages objectAtIndex:0] resizableImageWithCapInsets:UIEdgeInsetsZero
resizingMode:UIImageResizingModeStretch];
} else {
image = [[myImages objectAtIndex:0] stretchableImageWithLeftCapWidth:0.0f topCapHeight:0.0f];
}
这在 iOS 6 上很好用,但在 iOS 5 上不行。为什么?
我的意思是,在 iOS 6 上,图像可以很好地拉伸并填充 UIImageView,但在 5 上却没有。
UIImageView 使用以下参数设置:
UIImageView myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,1024,50)];
[myImageView setContentMode:UIViewContentModeScaleToFill | UIViewContentModeRedraw];
[myImageView setImage:image];
【问题讨论】:
-
resizableImageWithCapInsets:...是一个 instance 方法,所以你不能在类本身上使用respondsToSelector:,你需要一个实例(否则你正在检查是否UIImageclass 响应选择器)。您可以在这里简单地将其替换为instancesRespondToSelector:。 -
啊,好的,但出于某种原因,它工作正常。
-
顺便说一句,创建具有零边缘插入/上限宽度的可拉伸图像实际上没有意义。您可以在那里使用原始图像(默认基本上是拉伸整个图像,这些方法仅适用于您希望图像的边框不拉伸)。我怀疑这种“边缘案例”的行为从 iOS 5 更改为 6。
-
好的,我同意,但这是我设法在 iOS 6 上拉伸图像的唯一方法,但 iOS 5 不喜欢它。
-
将图像添加到 UIImageView 而不使用这种可拉伸的东西没有任何区别。图像继续不拉伸。伙计,这是一场噩梦。
标签: iphone ios objective-c ipad cocoa-touch