将CGPoint转换为NSValue

时间:2009-04-21 14:52:28

标签: objective-c iphone cgpoint nsvalue

CABasicAnimation.fromValue我想将CGPoint转换为“类”,因此我使用了NSValue valueWithPoint,但在设备模式或模拟器中,我无法使用... 如果在设备或模拟器中,则需要使用NSMakePointCGPointMake

7 个答案:

答案 0 :(得分:50)

UIKit添加了NSValue个定义函数

+ (NSValue *)valueWithCGPoint:(CGPoint)point

请参阅iPhone doc

答案 1 :(得分:14)

@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

答案 2 :(得分:3)

在Swift中,您可以更改这样的值:

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

答案 3 :(得分:1)

&(cgpoint) - >获取cgpoint的引用(地址) (NSPoint *)&(cgpoint) - >强制转换引用NSPoint指针 *(NSPoint (cgpoint) - >取消引用NSPoint指针返回一个NSPoint以使返回类型开心

答案 4 :(得分:1)

在Swift中,静态方法更改为初始化方法:

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

答案 5 :(得分:0)

如果您正在使用最新版本的Xcode(2015年后),则可以采用现代的Objective-C语法。您只需要将CGPoint包装在@()中即可:

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

在后台,编译器将为您调用+[NSValue valueWithCGPoint:]

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

答案 6 :(得分:-2)

不要认为它是“转换”你的观点 - NSValue是一个包装类,它包含像NSPoint这样的原始结构。无论如何,这是你需要的功能。它是Cocoa的一部分,但不是Cocoa Touch。您可以将整个功能添加到项目中,也可以在需要的地方进行相同的转换。

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