2012-03-27 62 views
1

我想重用自定义按钮类中的一小块代码。为此,我需要传递不可拉伸的图像(图标)或可伸缩图像('旋风')。在代码中,我需要设置矩形来绘制高度,所以我想,理想情况下,只需确定图像是否可拉伸?如果不是我画的大小的图像,如果没有我画在包含矩形的边界。是否可以确定UIImage是否可伸缩?

从我调查到目前为止capInsets(iOS 5)或leftCapWidth/topCapHeight(iOS 5之前)没有用。

有什么东西埋在核心或石英信息我可以使用?

只是好奇,现在我用一个额外的参数编码。

**我因为通过CGImageRef读取和CI相当于**已经

据我可以告诉有,我们可以访问,以确定这些图像没有这样的信息,这引出了如何做的问题OS知道吗?

回答

1

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

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

祝你好运。

+0

我已经被告知,在android中它是通常表示图像的子类。格儿。 :P通过在UIView子类中设置一个布尔可拉伸属性来编写代码很容易,我使用该子类在按钮内呈现,然后在setter和drawRect例程中检查它。所以这是一个我已经在技术上解决的问题。我只是好奇而已。 – Diziet 2012-03-27 15:35:25

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; 
} 
+0

这对我不起作用。它是由stretchableImageWithLeftCapWidth/resizableImageWithCapInsets定义的图像。所以它总是比包含矩形的小。 – Diziet 2012-03-27 15:37:07