是否可以确定UIImage是否可伸缩?

时间:2012-03-27 15:16:07

标签: iphone objective-c ios uiimage

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

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

我可以使用核心或石英信息中隐藏的东西吗?

好奇,现在我正在用额外的参数编码。

**我读过CGImageRef和CI等效**

据我所知,没有这样的信息我们可以访问以识别这些图像,这引出了操作系统如何知道的问题?

3 个答案:

答案 0 :(得分:1)

除非你有一些强烈的图像分析(不会100%正确),否则无法检测到这一点。 UIImage本质上是一些带有元信息的像素,都是从你加载它的文件中获得的。没有文件格式会有这些信息。

但是,您可以将某些信息编码到图像的文件名中。如果你有一个可伸缩的名为foo.png的图像,为什么不把它叫做foo.stretch.png?您的加载例程可以分析文件名并提取可以与UIImage关联的元信息(请参阅http://labs.vectorform.com/2011/07/objective-c-associated-objects/了解相关对象),或者创建自己的类,将UIImage与元信息组合在一起。

祝你的研究顺利。

答案 1 :(得分:0)

当你创建UIImage *时,它的.size属性是绝对的。 如果你的意思是可伸缩到你的按钮视图。只是检查比例。例如。

- (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;
}

答案 2 :(得分:0)

您可以检查它的班级。

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%@\nStretchable class:\t%@",imgClass,imgStrClass);

控制台:

Normal class:       UIImage
Stretchable class:  _UIResizableImage
相关问题