Si votre application est destinée uniquement à la distribution interne, vous pouvez utiliser une API privée. Si vous regardez les fonctions définies dans le cadre de CoreGraphics, vous verrez qu'il ya un tas de fonctions et parmi eux un appelé CGPatternGetBounds
:
otool -tV /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics | egrep "^_CGPattern"
Il vous suffit de faire une recherche de fonction sur le cadre et l'utiliser à travers un pointeur de fonction.
L'en-tête pour inclure:
#include <dlfcn.h>
Le pointeur de fonction:
typedef CGRect (*CGPatternGetBounds)(CGPatternRef pattern);
Le code pour récupérer la fonction:
void *handle = dlopen("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics", RTLD_NOW);
CGPatternGetBounds getBounds = (CGPatternGetBounds) dlsym(handle, "CGPatternGetBounds");
Le code pour récupérer les limites:
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)
Avez-vous des indices sur la façon dont je vais aller dans les internals? Cela fonctionnerait pour les applications distribuées en interne, et non sur App Store. – PeyloW
Vous devez soit trouver une déclaration pour struct CGPattern ou simplement inspecter la mémoire dans le débogueur. Et puis espérons qu'ils ne changeront pas la mise en page dans une future version du framework. – Anomie