在CABasicAnimation.fromValue
我想将CGPoint
转换为“类”,因此我使用了NSValue
valueWithPoint
,但在设备模式或模拟器中,我无法使用...
如果在设备或模拟器中,则需要使用NSMakePoint
或CGPointMake
。
答案 0 :(得分:50)
答案 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:]
。
答案 6 :(得分:-2)
不要认为它是“转换”你的观点 - NSValue是一个包装类,它包含像NSPoint这样的原始结构。无论如何,这是你需要的功能。它是Cocoa的一部分,但不是Cocoa Touch。您可以将整个功能添加到项目中,也可以在需要的地方进行相同的转换。
NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
return (*(NSPoint *)&(cgpoint));
}