2012-04-22 7 views
1

私はObjective-Cを使い始めていますが、それでもまだ得られなかった変数のスコープに関するものがあります。私はそれについて調べましたが、私はまだ間違っていることをキャッチできませんでした。Objective-Cの可変スコープ

私は2つのポイントのx、yの差を与えるコードを作成しようとしています。最初のIF内の最初のNSLogはpointWhereDragBegan.xと.yの正しい値を示しますが、2番目の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); 
} 
} 
+0

2番目の 'if'ステートメントに' pointWhereDragBegan'を記録していません。あなたは 'pointWhereDragEnded'と減算の結果だけを記録しています。 –

+0

私はその場合、私は2番目の場合、値は-1.998683と0になります。 – rantunes

答えて

4

drag.state同時にUIGestureRecognizerStateBeganUIGestureRecognizerStateEndedになることはありません。このメソッドは、各状態で1回、2回呼び出す必要があります。

その結果、問題を解決するには、pointWhereDragBeganをメソッドスコープの外に維持する必要があります。たとえば、インスタンス変数を使用できます。

+0

答えをいただきありがとうございます、私はそれがインスタンス変数を作成することができます。私はインスタンス変数なしでそれを行う方法があることを期待していた。私は、IFブロック外の変数を宣言したときに、メソッドスコープ内のどこでも同じ変数を参照すると考えました。 – rantunes

+0

しかし1回の呼び出しでのみ。メソッドが2回目に呼び出された場合、最初の呼び出しで割り当てられた値は保持されません。 –