2009-04-21 195 views
19

CABasicAnimation.fromValue我想一个CGPoint转换为“类”,所以我用NSValuevalueWithPoint但在设备模式或模拟器一个是不工作... 需要使用NSMakePointCGPointMake如果设备或模拟器。转换一个CGPoint至NSValue

回答

50

有一个UIKit除了NSValue定义一个函数

+ (NSValue *)valueWithCGPoint:(CGPoint)point 

iPhone doc

-2

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

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

您能否解释您的回复中使用的语法?看起来很有用。 – Dimitris 2010-08-31 13:55:05

+0

语法是**错误**,所以函数,不管它是什么......(它没有解释)是_useless_。 – 2011-12-01 16:50:08

+0

语法正确,但转换无用,* CGPoint *和* NSPoint *是相同类型(* NSPoint *它的类型定义为* CGPoint *)。 – 2013-06-18 15:39:43

1

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

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

1

在斯威夫特的静态方法是改变一个初始化器方法:

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

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

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