Универсальное решение для хранения CGPoint в NSArray в Cocoa и Cocoa Touch?

У меня есть класс, которым я хотел бы поделиться между приложениями Cocoa и Cocoa Touch. Этот класс рассчитывает различные CGPoints и сохраняет их в массиве. В какао есть [NSValue valueWithPoint], В Какао Touch есть [NSValue valueWithCGPoint],

Есть ли какое-либо решение, которое позволило бы мне обойти, используя эти специфичные для фреймворка методы?

1 ответ

Решение

Вы можете создать категорию на NSValue для того, чтобы добавить valueWithCGPoint: а также CGPointValue методы к какао.

#если! TARGET_OS_IPHONE
@interface NSValue (MyCGPointAddition)
+ (NSValue *)valueWithCGPoint:(CGPoint) точка;
- (CGPoint)CGPointValue;
@конец
#endif
#если! TARGET_OS_IPHONE
@implementation NSValue (MyCGPointAddition)
+ (NSValue *)valueWithCGPoint:(CGPoint)point {
    return [self valueWithPoint:NSPointFromCGPoint(point)];
}
- (CGPoint)CGPointValue {
    вернуть NSPointToCGPoint([self pointValue]);
}
@конец
#endif

Или вы можете использовать valueWithBytes:objCType: а также getValue:,

Точка CGPoint = {10, 10};
NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGPoint)];
// ...
[значение getValue:& точка];
Другие вопросы по тегам