关于iPhone:是否可以确定UIImage是否可拉伸?

Is it possible to determine if a UIImage is stretchable?

我正在尝试在自定义按钮类中重用一小段代码。为此,我需要传递不可拉伸的图像(图标)或可拉伸的图像(\\'swoosh \\')。在代码中,我需要设置rect来绘制高度,因此,理想情况下,我想简单地确定图像是否可拉伸?如果不是,则以图像的大小进行绘制,如果不是,则以包含矩形的边界进行绘制。

到目前为止,根据我的调查,capInsets(iOS 5)或leftCapWidth / topCapHeight(iOS 5之前的版本)对此没有帮助。

我可以使用的岩心或石英信息中是否藏有某些东西?

很好奇,现在我用一个额外的参数围绕它编码。

**此后,我已通读CGImageRef和CI等效项**

据我所知,没有可以用来识别此类图像的信息,这就引出了操作系统如何知道的问题?


除非您进行了深入的图像分析(不可能100%正确),否则无法检测到此错误。 UIImage本质上是一些具有元信息的像素,所有像素都从加载它的文件中获得。没有文件格式会包含该信息。

但是,您可以将一些信息编码到图像的文件名中。如果您有一个名为foo.png的可拉伸图像,为什么不将其称为foo.stretch.png?您的加载例程可以分析文件名并提取可以与UIImage关联的元信息(有关关联的对象,请参见http://labs.vectorform.com/2011/07/objective-c-associated-objects/),也可以通过创建您自己的类,该类将具有元信息的UIImage合成。

祝您研究顺利。


您可以检查其类别。

1
2
3
4
5
6
7
8
UIImage *img = [UIImage imageNamed:@"back"];
NSString *imgClass = NSStringFromClass(img.class);
   
UIImage *imgStretch = [img stretchableImageWithLeftCapWidth:10 topCapHeight:10];
NSString *imgStrClass = NSStringFromClass(imgStretch.class);
   
NSLog(@"Normal class:\\t%@\
Stretchable class:\\t%@"
,imgClass,imgStrClass);

控制台:

1
2
Normal class:       UIImage
Stretchable class:  _UIResizableImage

当您创建UIImage *时,其.size属性是绝对的。
如果您的意思是可以拉伸到您的按钮视图。只需检查比例即可。

1
2
3
4
5
6
7
8
9
10
11
- (BOOL) stretchableImage:(UIImage*)aImage toView:(UIView*)aView{
    CGFloat scaleW = aView.size.width/aImage.size.width;
    CGFloat scaleH = aView.size.height/aImage.size.height;

    if (scaleW == scaleH){
       if (scaleW < 1)
           return YES;
    }

    return NO;
}