resizeImageWithCapInsets:resizeMode:在iOS 5.1上崩溃

我使用这段代码正确地拉伸图像,但在iOS 5.1上它崩溃。 如果我从最后删除resizingMode,它的作品,但图像然后平铺,看起来很有趣。 任何想法,为什么它崩溃?

谢谢

self.scrollViewImage.image = [[UIImage imageNamed:@"SysInfoBackBox"] resizableImageWithCapInsets:UIEdgeInsetsMake(40, 40, 40, 40) resizingMode:UIImageResizingModeStretch]; 

这是iOS 6.0中引入的一种新方法,以前的版本不支持。 如果你想让代码在以前的版本上运行,你将不得不在运行时检查UIImage实例是否响应该方法的select器,如果不是,则实现替代。

 if ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) { self.scrollViewImage.image = [[UIImage imageNamed:@"SysInfoBackBox"] resizableImageWithCapInsets:UIEdgeInsetsMake(40, 40, 40, 40) resizingMode:UIImageResizingModeStretch]; } else { // alternative } 

这个函数resizableImageWithCapInsets:resizingMode:不能在ios 5.0(只有> = 6.0)上工作,但是resizableImageWithCapInsets: does,试着使用它。 也许一个简单的replace可以帮助你。

我重播到另一个问题应该是有关你的问题https://stackoverflow.com/a/14623534/2028575

但如果你喜欢,我可以把这里的答案:

这只发生在使用iOS5.x的设备上,调整UIImageView的大小来显示以这种方式创build的UIImage:

  UIEdgeInsets edgeInsets = UIEdgeInsetsMake(topCapHeight, leftCapWidth, topCapHeight, leftCapWidth); image = [originalImage resizableImageWithCapInsets:edgeInsets]; 

这可能是iOS6.x中已经修复的iOS错误

如果您的情况是使用镜像条件调整图像大小,则可以使用以下方法:

创build一个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.0中正常运行应用程序而没有任何问题的情况下使用它,并且可以在iOS 6或更高版本的设备上使用新支持的方法。