Подтвердить что ты не робот

Преобразование CGPoint в NSValue

В CABasicAnimation.fromValue Я хочу преобразовать CGPoint в "class", поэтому я использовал NSValue valueWithPoint, но в режиме устройства или симулятора один не работает... необходимо использовать NSMakePoint или CGPointMake, если в устройстве или симуляторе.

4b9b3361

Ответ 1

Существует дополнение UIKit к NSValue, которое определяет функцию

+ (NSValue *)valueWithCGPoint:(CGPoint)point

См. iPhone doc

Ответ 2

@ashcatch ответ очень полезен, но учтите, что эти методы из добавочных значений копирования, когда собственные методы NSValue хранят указатели! Вот мой код, проверяющий его:

CGPoint point = CGPointMake(2, 4);
NSValue *val = [NSValue valueWithCGPoint:point];
point.x = 10;
CGPoint newPoint = [val CGPointValue];

здесь newPoint.x = 2; point.x = 10


CGPoint point = CGPointMake(2, 4);
NSValue *val = [NSValue valueWithPointer:&point];
point.x = 10;
CGPoint *newPoint = [val pointerValue];

здесь newPoint.x = 10; point.x = 10

Ответ 3

В Swift вы можете изменить значение, подобное этому:

    var pointValueare = CGPointMake(30,30)
    NSValue(CGPoint: pointValueare)

Ответ 4

& (cgpoint) → получить ссылку (адрес) на cgpoint (NSPoint *) & (cgpoint) → показывает, что ссылка на указатель NSPoint * (NSPoint) (cgpoint) → различия, которые указатель NSPoint возвращает NSPoint, чтобы сделать возвращаемый тип счастливым

Ответ 5

В Swift статический метод изменяется на метод инициализации:

var pointValue = CGPointMake(10,10)
NSValue(CGPoint: pointValue)

Ответ 6

Не думайте об этом как о "преобразовании" вашей точки. NSValue - это класс-оболочка, который содержит примитивные структуры, такие как NSPoint. В любом случае, здесь нужна функция. Это часть Cocoa, но не Cocoa Touch. Вы можете добавить всю функцию в свой проект или просто сделать то же самое преобразование, где вам это нужно.

NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
   return (*(NSPoint *)&(cgpoint));
}