如何在vector_float2和CGPoint *之间进行转换?

时间:2015-07-10 14:35:26

标签: objective-c vector type-conversion cgpoint xcode7

在Objective-C中,在vector_float2和CGPoint *之间进行转换的最简单/最快的方法是什么?

Apple是否为此类型转换提供了任何内置功能?我注意到样本应用程序中的2-3个位置,他们只是调用CGPointMake()等来进行转换

是否可以简单地将CGPoint *转换为vector_float2,反之亦然?这样做是否安全?

更新:显然解决方案是:

vector_float2 v = (vector_float2){(float)point.x, (float)point.y};
CGPoint p = CGPointMake(v.x, v.y);

但是如果你需要经常这样做,这很麻烦,如果有vector_float2*CGPoint*的C数组,那就更加麻烦了。所以我正在寻找已经存在的解决方案或者我可能忽视的非常简单的替代方案。

2 个答案:

答案 0 :(得分:1)

我试图简单地扩展function getUserById(usersArr, userId, cb){ cb((usersArr.filter(function(el){ return el.id === userId; })[0])); } getUserById(users, '15a', function(user){ return 'The user with the id 15a has the email of ' + user.email + ' the name of ' + user.name + ' and the address of ' + user.address; }); var users = [ { id: '43d', email: 'james@gmail.com', name: 'james', address: '16 N' }, { id: '15a', email: 'carry@gmail.com', name: 'Carry', address: '14 N' }, { id: '87t', email: 'jeff@gmail.com', name: 'Jeff', address: '23 N' }, ]; 但似乎无法导入CGPoint;甚至没有桥接头文件。

vector_float2

你确实有几种选择。您可以使用返回// Doesn't work!! extension CGPoint { init(vector: vector_float2) { self.x = CGFloat(vector.x) self.y = CGFloat(vector.y) } } 的计算Float扩展var并扩展CGFloat以将其位置转换为GKAgent2D

CGPoint

您还可以将extension Float { var f: CGFloat { return CGFloat(self) } } extension GKAgent2D { var cgposition: CGPoint { return CGPoint(x: self.position.x.f, y: self.position.y.f) } } 扩展为接受两个CGPoint

Float

在这两种情况下,您可以像这样使用它:

extension CGPoint {
    init(x: Float, y: Float) {
        self.x = CGFloat(x)
        self.y = CGFloat(y)
    }
}

extension GKAgent2D {
    var cgposition: CGPoint {
         // Note that the ".f" is gone from the example above
        return CGPoint(x: self.position.x, y: self.position.y)
    }
}

答案 1 :(得分:0)

示例:

CGPoint p                   = CGPointMake(1.0f, 1.0f);
vector_float2 v             = simd_make_float2(p.x, p.y);
CGPoint x                   = CGPointMake(v[0], v[1]);