19

CABasicAnimation.fromValue我想将 a 转换CGPoint为“类”,所以我使用NSValue valueWithPoint但在设备模式或模拟器中一个不工作......需要使用NSMakePoint或者CGPointMake如果在设备或模拟器中。

4

7 回答 7

52

还有一个定义函数的UIKit补充NSValue

+ (NSValue *)valueWithCGPoint:(CGPoint)point

请参阅iPhone 文档

于 2009-04-21T15:24:28.207 回答
13

@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

于 2012-06-19T17:52:29.193 回答
3

在 Swift 中,你可以像这样改变一个值:

    var pointValueare = CGPointMake(30,30)
    NSValue(CGPoint: pointValueare)
于 2015-04-25T05:47:33.263 回答
1

&(cgpoint) -> 获取对 cgpoint (NSPoint *)&(cgpoint) 的引用(地址) -> 将该引用转换为 NSPoint 指针 *(NSPoint ) (cgpoint) -> 取消引用该 NSPoint 指针以返回一个 NSPoint返回类型快乐

于 2011-05-04T21:56:59.803 回答
1

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

var pointValue = CGPointMake(10,10)
NSValue(CGPoint: pointValue)
于 2015-04-17T13:26:13.573 回答
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

于 2019-02-21T17:08:11.257 回答
-2

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

NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
   return (*(NSPoint *)&(cgpoint));
}
于 2009-04-21T15:12:46.037 回答