resizableImageWithCapInsets:resizingMode:在iOS 5.1上崩溃

时间:2012-09-13 21:10:55

标签: ios xcode uiimage

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

由于

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

3 个答案:

答案 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或更高。