Pregunta

En CABasicAnimation.fromValue Quiero convertir un CGPoint a una "clase", así que utiliza NSValue valueWithPoint pero en modo de dispositivo o un simulador de uno que no funciona ... necesitará utilizar NSMakePoint o CGPointMake si en el dispositivo o un simulador.

¿Fue útil?

Solución

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

+ (NSValue *)valueWithCGPoint:(CGPoint)point

Consulte iPhone doc

Otros consejos

respuesta

@ashcatch 's es muy útil, pero tenga en cuenta que los métodos de los valores de copia Además, cuando NSValue almacenar punteros métodos nativos! Aquí está mi código comprobando que:

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

aquí 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

En Swift, se puede cambiar un valor de la siguiente manera:

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

& (cgpoint) -> obtener una referencia (dirección) a cgpoint (NSPoint *) y (cgpoint) -> arroja que la referencia a un puntero NSPoint * (NSPoint ) (cgpoint) -> elimina referencias a ese puntero NSPoint para devolver un NSPoint para hacer el tipo de retorno feliz

En Swift el método estático es el cambio a un método initialiser:

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

Si está utilizando una versión reciente de Xcode-ish (post 2015), puede adoptar la sintaxis moderna de Objective-C para esto. Sólo tiene que envolver su CGPoint en @():

CGPoint primitivePoint = CGPointMake(4, 6);
NSValue *wrappedPoint = @(primitivePoint);

Bajo el capó el compilador llamará +[NSValue valueWithCGPoint:] para usted.

https: // desarrollador .apple.com / library / archive / releasenotes / ObjectiveC / ModernizationObjC / AdoptingModernObjective-C / AdoptingModernObjective-C.html

No pensar en él como "convertir" su point-- NSValue es una clase contenedora que contiene estructuras primitivas como NSPoint. De todos modos, aquí está la función que necesita. Es parte de cacao, pero no Cocoa Touch. Puede agregar la función de la totalidad de su proyecto, o simplemente hacer la misma conversión siempre que lo necesite.

NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
   return (*(NSPoint *)&(cgpoint));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top