gpt4 book ai didi

objective-c - Objective-C 中的变量作用域

转载 作者:行者123 更新时间:2023-12-03 16:55:09 28 4
gpt4 key购买 nike

我正在开始使用 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 永远不会同时出现 UIGestureRecognizerStateBeganUIGestureRecognizerStateEnded。该方法应该调用两次:每个状态一次。

因此,为了解决您的问题,您需要将 pointWhereDragBegan 保留在方法范围之外。例如,您可以使用实例变量。

关于objective-c - Objective-C 中的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com