我正在使用此代码正确地拉伸图像,但是在iOS 5.1上它会崩溃。 如果我从最后删除resizingMode,它可以工作,但图像然后平铺,看起来很有趣。 任何想法为什么会崩溃?
由于
self.scrollViewImage.image = [[UIImage imageNamed:@"SysInfoBackBox"] resizableImageWithCapInsets:UIEdgeInsetsMake(40, 40, 40, 40) resizingMode:UIImageResizingModeStretch];
答案 0 :(得分:11)
这是iOS 6.0中引入的新方法,以前的版本不支持。如果要在以前的版本上运行代码,则必须在运行时检查UIImage实例是否响应该方法的选择器,如果不响应则实现替代方案。
if ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) {
self.scrollViewImage.image = [[UIImage imageNamed:@"SysInfoBackBox"] resizableImageWithCapInsets:UIEdgeInsetsMake(40, 40, 40, 40) resizingMode:UIImageResizingModeStretch];
} else {
// alternative
}
答案 1 :(得分:4)
此功能
resizableImageWithCapInsets:resizingMode:
不适用于ios 5.0(仅> = 6.0),但是
resizableImageWithCapInsets:
确实如此,尝试使用它。也许一个简单的替代品可以帮助你。
答案 2 :(得分:-2)
我重播了另一个与您的问题有关的问题https://stackoverflow.com/a/14623534/2028575
但如果你愿意,我可以把这个答案放在这里:
这种情况只发生在iOS5.x设备调整大小的UIImageView上,这个UIImage以这种方式显示了创建的UIImage:
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(topCapHeight, leftCapWidth, topCapHeight, leftCapWidth);
image = [originalImage resizableImageWithCapInsets:edgeInsets];
这可能是已在iOS6.x中修复的iOS错误
如果你的案例是用镜像标准调整图像大小,你可以这样使用:
创建一个UIImage类并添加此实例方法:
- (UIImage*)resizableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight </b>
{
UIImage *image = nil;
float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (osVersion < 6.0) {
image = [self stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];
} else {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(topCapHeight, leftCapWidth, topCapHeight, leftCapWidth);
image = [self resizableImageWithCapInsets:edgeInsets];
}
return image;
}
方法:
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
已在iOS文档中弃用,但未在框架中弃用,这意味着您可以在iOS5.x设备中运行应用程序时使用它而没有任何问题,并使用iOS设备的新支持方法6或更高。