Iphone 从UIColor获取重复图案的大小?
我可以通过检查它所包装的Iphone 从UIColor获取重复图案的大小?,iphone,ios,quartz-graphics,uicolor,Iphone,Ios,Quartz Graphics,Uicolor,我可以通过检查它所包装的CGColor实例来查询UIColor是否是模式,CGColorGetPattern()函数返回模式(如果它存在),或者null返回模式(如果它不是模式颜色) CGPatternCreate()方法需要一个bounds当创建图案时,该值定义图案平铺的大小(用石英术语称为单元) 创建后,如何从UIColor或背景CGPattern检索此图案大小 似乎没有任何方法可以直接从CGPatternRef检索任何信息 如果必须这样做,可能唯一的方法(除了戳CGPattern结构的私有
CGColor
实例来查询UIColor
是否是模式,CGColorGetPattern()
函数返回模式(如果它存在),或者null
返回模式(如果它不是模式颜色)
CGPatternCreate()
方法需要一个bounds
当创建图案时,该值定义图案平铺的大小(用石英术语称为单元)
创建后,如何从
UIColor
或背景CGPattern
检索此图案大小 似乎没有任何方法可以直接从CGPatternRef检索任何信息
如果必须这样做,可能唯一的方法(除了戳CGPattern结构的私有内容之外,这可能被视为“使用私有API”)是将模式呈现到足够大的图像缓冲区,然后检测重复的子单元。这可能是一个很好的起点。我认为不可能从CGPatternRef获取边界,如果这是您所要求的创建自己的颜色类来存储边界并允许您通过属性访问它们可能是一个可行的解决方案
从UIColor中提取模式边界似乎是不可能的。如果您的应用程序仅用于内部分发,那么您可以使用私有API。如果查看CoreGraphics框架中定义的函数,您将看到有一组函数,其中一个函数名为
cgpattergetbounds
:
otool -tV /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics | egrep "^_CGPattern"
您只需在框架上进行一些函数查找,并通过函数指针使用它
标题包括:
#include <dlfcn.h>
用于检索函数的代码:
void *handle = dlopen("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics", RTLD_NOW);
CGPatternGetBounds getBounds = (CGPatternGetBounds) dlsym(handle, "CGPatternGetBounds");
用于检索边界的代码:
UIColor *uicolor = [UIColor groupTableViewBackgroundColor]; // Select a pattern color
CGColorRef color = [uicolor CGColor];
CGPatternRef pattern = CGColorGetPattern(color);
CGRect bounds = getBounds (pattern); // This result is a CGRect(0, 0, 84, 1)
有没有关于我将如何着手并深入研究内部的线索?这适用于内部分发的应用程序,而不是应用商店上的应用程序。您必须找到struct CGPattern的声明,或者只检查调试器中的内存。然后希望他们不要在未来版本的框架中更改布局。
UIColor *uicolor = [UIColor groupTableViewBackgroundColor]; // Select a pattern color
CGColorRef color = [uicolor CGColor];
CGPatternRef pattern = CGColorGetPattern(color);
CGRect bounds = getBounds (pattern); // This result is a CGRect(0, 0, 84, 1)