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
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));
}