从UIColor获取重复图案的大小?

Pey*_*loW 11 iphone quartz-graphics uicolor ios

我可以UIColor通过检查CGColor它包装的实例来查询a 是否是模式,该CGColorGetPattern()函数返回模式(如果存在),或者null它是不是模式颜色.

CGPatternCreate()方法需要bounds在创建模式时,此值定义模式图块的大小(在Quartz用语中称为单元格).

我将如何从a UIColor或者CGPattern创建背景后检索此图案大小?

Lau*_*ble 6

如果您的应用程序仅用于内部分发,则可以使用私有API.如果你看一下CoreGraphics框架中定义的函数,你会发现有很多函数,其中有一个叫做CGPatternGetBounds:

otool -tV /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics | egrep "^_CGPattern"
Run Code Online (Sandbox Code Playgroud)

您只需要在框架上进行一些函数查找,并通过函数指针使用它.

标题包括:

#include <dlfcn.h>
Run Code Online (Sandbox Code Playgroud)

函数指针:

typedef CGRect (*CGPatternGetBounds)(CGPatternRef pattern);
Run Code Online (Sandbox Code Playgroud)

检索函数的代码:

void *handle = dlopen("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics", RTLD_NOW);
CGPatternGetBounds getBounds = (CGPatternGetBounds) dlsym(handle, "CGPatternGetBounds");
Run Code Online (Sandbox Code Playgroud)

检索边界的代码:

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)
Run Code Online (Sandbox Code Playgroud)