UIImage 在 iOS 5 上没有拉伸

Posted

技术标签:

【中文标题】UIImage 在 iOS 5 上没有拉伸【英文标题】:UIImage not stretching on iOS 5 【发布时间】: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:,你需要一个实例(否则你正在检查是否UIImage class 响应选择器)。您可以在这里简单地将其替换为instancesRespondToSelector: 啊,好的,但出于某种原因,它工作正常。 顺便说一句,创建具有零边缘插入/上限宽度的可拉伸图像实际上没有意义。您可以在那里使用原始图像(默认基本上是拉伸整个图像,这些方法仅适用于您希望图像的边框拉伸)。我怀疑这种“边缘案例”的行为从 iOS 5 更改为 6。 好的,我同意,但这是我设法在 iOS 6 上拉伸图像的唯一方法,但 iOS 5 不喜欢它。 将图像添加到 UIImageView 而不使用这种可拉伸的东西没有任何区别。图像继续不拉伸。伙计,这是一场噩梦。 【参考方案1】:

调用resizableImageWithCapInsets: 并使用良好的边缘插入值代替您的UIEdgeInsetsZero。为此,请计算出视图的宽度和高度。那么:

image = [myView resizableImageWithCapInsets:UIEdgeInsetsMake(
             height/2.0-1, width/2.0-1, height/2.0-1, width/2.0-1];

【讨论】:

【参考方案2】:
[[myImages objectAtIndex:0] stretchableImageWithLeftCapWidth:0.0f topCapHeight:0.0f]]

这是 iOS 5 中不推荐使用的方法。请通过此

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImage_Class/DeprecationAppendix/AppendixADeprecatedAPI.html

也许对你有帮助。

【讨论】:

你还没有阅读我的代码。尽管苹果说 resizableImageWithCapsInside 是一个 iOS 5 API,但当我的这段代码在 iOS 5 上运行时,respondToSelector 返回的行返回 NO,即 resizableImageWithCapsInside 不适用于 iOS 5。如果我强制它运行应用程序崩溃。跨度> 顺便说一句,只使用 resizableImageWithCapInsets: 并不能解决问题。 @RubberDuck go through this link ***.com/questions/12414844/… resizableImageWithCapsInside 方法在 iOS 6 中引入 好吧,当您的应用程序崩溃时,您会在控制台中遇到什么错误。 好的,我在 iOS 5 上使用 resizableImageWithCapInsets:resizingMode:,现在我已将其更正为 resizableImageWithCapInsets: 并且崩溃消失了,但图像没有拉伸。在 iOS6 上使用 resizableImageWithCapInsets:resizingMode: 会使图像拉伸。

以上是关于UIImage 在 iOS 5 上没有拉伸的主要内容,如果未能解决你的问题,请参考以下文章

iOS图片拉伸

IOS 拉伸图片(封装)

避免在UIImageView中拉伸UIImage

在裁剪之前调整 UIImage 或 CIImage 的大小会拉伸图像吗?

iOS - 如何将 UIImage 和 UILabel 作为页脚放在同一行?

UIImage 不应在 UIImageView 内拉伸