Objective-C中的可变范围
我刚开始学习Objective-C,关于变量的作用域,我还没有了解。我搜索了一下,但还是没发现我做错了什么 我正在尝试创建一个代码,它将给出两点之间的x,y差。第一个IF中的第一个NSLog显示pointWhereDragBegan.x和.y的正确值,但当我尝试在第二个IF语句中获取pointWhereDragBegan的值时,我获取的pointWhereDragBegan.x的值为-1.998683,而.y的值为0.0 我确信这是件很简单的事,我就是抓不住我的错误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:(
- (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块外声明变量时,它会在方法范围内的任何地方引用相同的变量,但只在一次调用中引用。如果第二次调用该方法,则不会保留在第一次调用中分配的值。