4

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

谢谢

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

3 回答 3

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
}
于 2012-09-13T21:23:51.590 回答
4

此功能 resizableImageWithCapInsets:resizingMode: 不适用于 ios 5.0(仅 >=6.0),但 resizableImageWithCapInsets: 可以尝试使用它。也许一个简单的替换可以帮助你。

于 2012-12-11T12:01:46.163 回答
-2

我重播了另一个应该与您的问题有关的问题https://stackoverflow.com/a/14623534/2028575

但如果你愿意,我可以在这里放一个简单的答案:

这只发生在 iOS5.x 调整 UIImageView 大小的设备上,该 UIImageView 显示以这种方式创建的 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 或更高版本的设备上使用新支持的方法.

于 2013-01-31T12:15:41.613 回答