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 上没有拉伸的主要内容,如果未能解决你的问题,请参考以下文章
在裁剪之前调整 UIImage 或 CIImage 的大小会拉伸图像吗?