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

标签 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:(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/

相关文章:

ios - 为 ios 添加 google map sdk 后我看不到 map

ios - 与发布后的实际下载大小相比,testflight 应用程序大小是否膨胀了很多?

ios - 使用 swift 打开 PDF 文件

cocoa - Swift:尝试在循环中更新 NSTextField,但它只获取最后一个值

iphone - 在 CGContext 中绘制 PDF 右上角

objective-c - 第一次打开应用程序?

ios - 访问实例变量和方法的推荐方法是什么?

ios - NSTimer 不调用他的选择器

ios - NSUserDefaults 不保存整数

ios - 如果从通知或跳板触发,如何在 applicationDidBecomeActive 中确定?