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