objective-c iphone cgpoint nsvalue

objective c - Convertir un CGPoint a NSValue



objective-c iphone (6)

& (cgpoint) -> obtener una referencia (dirección) a cgpoint (NSPoint *) & (cgpoint) -> convierte esa referencia a un puntero NSPoint * (NSPoint ) (cgpoint) -> dereferencias de que el puntero NSPoint devuelve un NSPoint para hacer el tipo de retorno feliz

En CABasicAnimation.fromValue quiero convertir un CGPoint a una "clase", así que utilicé NSValue valueWithPoint pero en modo dispositivo o simulador uno no funciona ... necesito usar NSMakePoint o CGPointMake si está en el dispositivo o simulador.


En Swift, el método estático se cambia a un método inicializador:

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


En Swift, puedes cambiar un valor como este:

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


Hay una adición de NSValue a NSValue que define una función

+ (NSValue *)valueWithCGPoint:(CGPoint)point

Ver documento de iPhone


La respuesta de @ashcatch es muy útil, pero tenga en cuenta que los métodos de los valores de copia adicionales, cuando los métodos nativos de NSValue almacenan punteros. Aquí está mi código revisándolo:

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

aquí newPoint.x = 2; point.x = 10 newPoint.x = 2; point.x = 10

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

aquí newPoint.x = 10; point.x = 10 newPoint.x = 10; point.x = 10


No piense en esto como "convirtiendo" su punto: NSValue es una clase envoltura que contiene estructuras primitivas como NSPoint. De todos modos, aquí está la función que necesitas. Es parte de Cocoa, pero no de Cocoa Touch. Puede agregar la función completa a su proyecto, o simplemente hacer la misma conversión donde la necesite.

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