В CABasicAnimation.fromValue
Я хочу преобразовать CGPoint
в "class", поэтому я использовал NSValue
valueWithPoint
, но в режиме устройства или симулятора один не работает...
необходимо использовать NSMakePoint
или CGPointMake
, если в устройстве или симуляторе.
Преобразование CGPoint в NSValue
Ответ 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));
}