Question

Dans CABasicAnimation.fromValue Je veux convertir un CGPoint à une « classe » si je NSValue valueWithPoint mais en mode appareil ou simulateur un ne fonctionne pas ... besoin d'utiliser NSMakePoint ou CGPointMake si l'appareil ou simulateur.

Était-ce utile?

La solution

Il y a un ajout de UIKit à NSValue qui définit une fonction

+ (NSValue *)valueWithCGPoint:(CGPoint)point

Voir iPhone doc

Autres conseils

La réponse de @ashcatch est très utile, mais considèrent que ces méthodes à partir des valeurs de copie d'addition, lorsque les méthodes NSValue natives des pointeurs de magasin! Voici mon code le vérifier:

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

ici newPoint.x = 2; point.x = 10


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

ici newPoint.x = 10; point.x = 10

Dans Swift, vous pouvez modifier une valeur comme ceci:

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

& (cgpoint) -> obtenir une référence (adresse) à cgpoint (NSPoint *) & (cgpoint) -> jette cette référence à un pointeur NSPoint * (NSPoint ) (cgpoint) -> déréférence ce pointeur NSPoint pour retourner un NSPoint pour faire le type de retour heureux

Swift la méthode statique est le changement d'une méthode d'initialiser:

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

Si vous utilisez une version récente ish de Xcode (après 2015), vous pouvez adopter la syntaxe moderne Objective-C pour cela. Vous avez juste besoin d'envelopper votre CGPoint dans @():

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

Sous le capot le compilateur appellera +[NSValue valueWithCGPoint:] pour vous.

https: // développeur .apple.com / bibliothèque / archive / releasenotes / ObjectiveC / ModernizationObjC / AdoptingModernObjective-C / AdoptingModernObjective-C.html

Ne pensez pas comme « conversion » est NSValue mon seuil une classe wrapper qui tient struct primitifs comme NSPoint. Quoi qu'il en soit, voici la fonction dont vous avez besoin. Cela fait partie du cacao, mais pas Cocoa Touch. Vous pouvez ajouter toute fonction à votre projet, ou faire exactement la même conversion où que vous soyez.

NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
   return (*(NSPoint *)&(cgpoint));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top