1

私は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);
}
}
4

1 に答える 1

4

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

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

于 2012-04-22T20:49:13.333 に答える