Получите размер повторяющегося шаблона из UIColor?

Я могу запросить, если UIColor является шаблоном, проверяя экземпляр CGColor, который он обертывает, функция CGColorGetPattern() возвращает шаблон, если он существует, или null, если это не цвет шаблона.

CGPatternCreate() для создания шаблона требуется bounds, это значение определяет размер паттерна шаблона (известный как ячейка в языке кварца).

Как я могу получить этот размер шаблона из UIColor или резервной копии CGPattern после его создания?

Ответ 1

Если ваше приложение предназначено только для внутреннего распространения, вы можете использовать частный API. Если вы посмотрите на функции, определенные в структуре CoreGraphics, вы увидите, что существует множество функций, а среди них - CGPatternGetBounds:

otool -tV /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics | egrep "^_CGPattern"

Вам просто нужно сделать некоторый поиск функций в фреймворке и использовать его с помощью указателя функции.

Заголовок, который будет включать:

#include <dlfcn.h>

Указатель функции:

typedef CGRect (*CGPatternGetBounds)(CGPatternRef pattern);

Код для извлечения функции:

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)

Ответ 2

Я не думаю, что его можно получить из CGPatternRef, если это то, что вы просите

Ответ 3

Кажется, что нет никакого способа напрямую получить любую информацию из CGPatternRef.

Если вы должны это сделать, возможно, единственный способ (помимо того, чтобы выталкивать личное содержимое структуры CGPattern, которое, вероятно, считается "использованием частных API" ), заключается в том, чтобы отобразить шаблон в достаточно большой буфер изображения, а затем обнаружить повторяющаяся субъединица. Поиск повторяющихся паттернов/изображений в изображениях может быть хорошей отправной точкой для этого.

Ответ 4

Создание собственного класса цветов, в котором хранятся оценки и доступ к ним через свойство, может быть жизнеспособным решением.

Извлечение границ шаблона из UIColor не представляется возможным.