我正在开始使用 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
永远不会同时出现 UIGestureRecognizerStateBegan
和 UIGestureRecognizerStateEnded
。该方法应该调用两次:每个状态一次。
因此,为了解决您的问题,您需要将 pointWhereDragBegan
保留在方法范围之外。例如,您可以使用实例变量。
关于objective-c - Objective-C 中的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271945/