2012-04-22 2 views
1

Objective-C를 시작했는데 여전히 얻지 못했던 변수 범위에 대해 설명합니다. 나는 그것에 대해 조사했지만 여전히 잘못하고있는 것을 잡을 수 없었다.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); 
} 
} 
+0

두 번째'if' 문에'pointWhereDragBegan'을 로깅하지 않습니다. 당신은'pointWhereDragEnded'와 빼기 결과를 기록하고 있습니다. –

+0

만약 내가 두 번째 경우에 pointWhereDragBegan을 기록한 경우, -1.998683과 0이 될 것입니다. – rantunes

답변

4

drag.state 동시에 UIGestureRecognizerStateBeganUIGestureRecognizerStateEnded 수 없을 것입니다. 이 메소드는 각 상태에서 한 번씩 두 번 호출해야합니다.

결과적으로 문제를 해결하려면 pointWhereDragBegan을 메소드 범위 외부에 유지해야합니다. 예를 들어, 인스턴스 변수를 사용할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 인스턴스 변수를 만드는 작업을 할 수있었습니다. 나는 인스턴스 변수없이 그것을 할 수있는 방법을 기대하고 있었다. 나는 IF 블록 밖에서 변수를 선언 할 때 메소드 범위 내의 아무 곳에서나 동일한 변수를 참조 할 것이라고 생각했습니다. – rantunes

+0

한 번의 호출 만합니다. 메서드를 두 번째 호출하면 첫 번째 호출에 할당 된 값이 유지되지 않습니다. –