如果声明:CGPoint返回奇怪的值

时间:2013-12-11 22:37:55

标签: ios objective-c cgpoint

我有一个数据类型为CGPoint的变量,名为endPosition。当endPosition在if语句中获取其值时,它将返回此疯狂值:结束位置:{1.6347776e-33,1.4012985e-45}

1。例如:

    if ([touch view] != background)
    {
        CGPoint location = [touch locationInView:self.view];

        CGPoint endPosition;

        if([touch view] == circle){
            CGPoint endPosition = {462.5, 98.5};
        }

        CGFloat xDist = (endPosition.x - location.x);
        CGFloat yDist = (endPosition.y - location.y);

        CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));

        NSLog(@"End Position: %@", NSStringFromCGPoint(endPosition));
    }

当CGPoint endPosition不在if语句中时,我得到正确的值:结束位置:{462.5,98.5}

2。例如:

    if ([touch view] != background)
    {
        CGPoint location = [touch locationInView:self.view];

        CGPoint endPosition = {462.5, 98.5};

        CGFloat xDist = (endPosition.x - location.x);
        CGFloat yDist = (endPosition.y - location.y);

        CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));

        NSLog(@"End Position: %@", NSStringFromCGPoint(endPosition));
     }

谁能告诉我该怎么做?我需要这个if语句:)提前感谢。

4 个答案:

答案 0 :(得分:4)

在您的示例1中,您永远不会初始化endPosition的值。那是因为在'if'语句(if([touch view] == circle){)中你定义了一个名为endPosition的新变量,它取代了该范围内的另一个变量。无论如何,您应该初始化endPositionCGPointZero

答案 1 :(得分:2)

这是因为在第一种情况下,如果endPoint,您没有为[touch view] != circle设置值。

在这种情况下,你的变量是未初始化的,你会得到一个恰好存在于内存中的随机值。您必须处理其他情况(else)或在声明变量时将其初始化为某个值,例如CGPointZero

答案 2 :(得分:0)

    CGPoint endPosition; //This is a declaration of a of new stack variable of name "endPosition"

    if([touch view] == circle){
        CGPoint endPosition = {462.5, 98.5}; //...AND this is a declaration of another variable
    }

您想从第二行删除CGPoint。

此外,由于您的CGPoint从未初始化,因此它不一定具有非垃圾值。您可以添加一个else块并将endPosition = CGPointZero放在那里,或者您可以在第一行上执行此操作。

编辑:{462.5,98.5}是错误的大小(2个双打),{462.5f,98.5f}是2个浮点数,但你应该坚持使用CGPointMake并避免使用“复杂”的文字。

答案 3 :(得分:0)

解决方案:

    CGPoint endPosition = CGPointZero;

    if([touch view] == circle){
        endPosition = CGPointMake(462.5, 98.5);
    }