【发布时间】:2009-04-21 14:52:28
【问题描述】:
在CABasicAnimation.fromValue 中,我想将CGPoint 转换为“类”,所以我使用了NSValue valueWithPoint,但在设备模式或模拟器中无法正常工作...
如果在设备或模拟器中,则需要使用NSMakePoint 或CGPointMake。
【问题讨论】:
标签: objective-c iphone cgpoint nsvalue
在CABasicAnimation.fromValue 中,我想将CGPoint 转换为“类”,所以我使用了NSValue valueWithPoint,但在设备模式或模拟器中无法正常工作...
如果在设备或模拟器中,则需要使用NSMakePoint 或CGPointMake。
【问题讨论】:
标签: objective-c iphone cgpoint nsvalue
【讨论】:
@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
【讨论】:
在 Swift 中,您可以像这样更改值:
var pointValueare = CGPointMake(30,30)
NSValue(CGPoint: pointValueare)
【讨论】:
&(cgpoint) -> 获取到 cgpoint 的引用(地址) (NSPoint *)&(cgpoint) -> 将该引用转换为 NSPoint 指针 *(NSPoint )(cgpoint) -> 取消引用该 NSPoint 指针以返回一个 NSPoint 以使返回类型快乐
【讨论】:
在 Swift 中,静态方法被更改为初始化方法:
var pointValue = CGPointMake(10,10)
NSValue(CGPoint: pointValue)
【讨论】:
如果您使用的是最新版本的 Xcode(2015 年后),您可以为此采用现代 Objective-C 语法。您只需将 CGPoint 包装在 @():
CGPoint primitivePoint = CGPointMake(4, 6);
NSValue *wrappedPoint = @(primitivePoint);
在后台编译器会为你调用+[NSValue valueWithCGPoint:]。
【讨论】:
不要认为它是“转换”你的观点——NSValue 是一个包装类,它包含像 NSPoint 这样的原始结构。无论如何,这是您需要的功能。它是 Cocoa 的一部分,但不是 Cocoa Touch。您可以将整个函数添加到您的项目中,或者在任何需要的地方进行相同的转换。
NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
return (*(NSPoint *)&(cgpoint));
}
【讨论】: