Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中的可变范围_Objective C_Ios_Cocoa_Scope - Fatal编程技术网

Objective-C中的可变范围

Objective-C中的可变范围,objective-c,ios,cocoa,scope,Objective C,Ios,Cocoa,Scope,我刚开始学习Objective-C,关于变量的作用域,我还没有了解。我搜索了一下,但还是没发现我做错了什么 我正在尝试创建一个代码,它将给出两点之间的x,y差。第一个IF中的第一个NSLog显示pointWhereDragBegan.x和.y的正确值,但当我尝试在第二个IF语句中获取pointWhereDragBegan的值时,我获取的pointWhereDragBegan.x的值为-1.998683,而.y的值为0.0 我确信这是件很简单的事,我就是抓不住我的错误 - (void)drag:(

我刚开始学习Objective-C,关于变量的作用域,我还没有了解。我搜索了一下,但还是没发现我做错了什么

我正在尝试创建一个代码,它将给出两点之间的x,y差。第一个IF中的第一个NSLog显示pointWhereDragBegan.x和.y的正确值,但当我尝试在第二个IF语句中获取pointWhereDragBegan的值时,我获取的pointWhereDragBegan.x的值为-1.998683,而.y的值为0.0

我确信这是件很简单的事,我就是抓不住我的错误

- (void)drag:(UILongPressGestureRecognizer *)drag{

CGPoint pointWhereDragBegan;
if(drag.state == UIGestureRecognizerStateBegan){
    pointWhereDragBegan = [drag locationInView:self];        
    NSLog(@"Drag started at %f,%f",pointWhereDragBegan.x,pointWhereDragBegan.y);        
}

if(drag.state == UIGestureRecognizerStateEnded){
    CGPoint pointWhereDragEnded = [drag locationInView:self];  

    float xDragged = pointWhereDragEnded.x - pointWhereDragBegan.x;
    float yDragged = pointWhereDragEnded.y - pointWhereDragBegan.y;



    NSLog(@"Drag ended at %f,%f",pointWhereDragEnded.x,pointWhereDragEnded.y);
    NSLog(@"The user moved %f, %f",xDragged,yDragged);
}
}
drag.state将永远不会同时为UIGestureRecognitizerStateStart和UIGestureRecognitizerStateEnded。此方法应调用两次:在每个状态中调用一次

因此,为了解决问题,您需要将pointWhereDragBegan持久化到方法范围之外。例如,您可以使用实例变量。

drag.state永远不会同时为UIGestureRecognitizerStateStart和UIGestureRecognitizerStateEnded。此方法应调用两次:在每个状态中调用一次


因此,为了解决问题,您需要将pointWhereDragBegan持久化到方法范围之外。例如,可以使用实例变量。

在第二个if语句中没有记录pointWhereDragBegan。您只记录了pointWhereDragEnded和减法的结果。我的意思不是说,在第二个if中记录了pointWhereDragBegan,值为-1.998683和0。您没有在第二个if语句中记录pointWhereDragBegan。您只记录了pointWhereDragEnded和减法的结果。我的意思不是说,在第二个if中记录了pointWhereDragBegan,值将是-1.998683和0。谢谢您的回答,我可以创建一个实例变量。我希望有一种不用实例变量的方法。我认为,当我在IF块外声明变量时,它会在方法范围内的任何地方引用相同的变量,但只在一次调用中引用。如果第二次调用该方法,在第一次调用中分配的值将不会保留。谢谢您的回答,我可以创建一个实例变量。我希望有一种不用实例变量的方法。我认为,当我在IF块外声明变量时,它会在方法范围内的任何地方引用相同的变量,但只在一次调用中引用。如果第二次调用该方法,则不会保留在第一次调用中分配的值。