Si su aplicación está destinada a la distribución interna solamente, entonces puede usar una API privada. Si nos fijamos en las funciones definidas en el marco CoreGraphics, verá que hay un montón de funciones y entre ellos uno llamado CGPatternGetBounds
:
otool -tV /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics | egrep "^_CGPattern"
Sólo tienes que hacer un poco de búsqueda de función en el marco y utilizarlo a través de un puntero de función.
La cabecera para incluir:
#include <dlfcn.h>
La función de puntero:
typedef CGRect (*CGPatternGetBounds)(CGPatternRef pattern);
El código para recuperar la función:
void *handle = dlopen("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics", RTLD_NOW);
CGPatternGetBounds getBounds = (CGPatternGetBounds) dlsym(handle, "CGPatternGetBounds");
El código para recuperar los límites:
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)
¿Algún indicio de cómo voy a ir y penetrar en el interior? Eso funcionaría para aplicaciones distribuidas internamente, y no en App Store. – PeyloW
Tendría que encontrar una declaración para struct CGPattern o simplemente inspeccionar la memoria en el depurador. Y luego espero que no cambien el diseño en una versión futura del marco. – Anomie