2012-07-20 2 views
0

내 기본보기에 UIView 무리가 있습니다. touchesBegan, touchesMoved 및 touchesEnded 기능을 앱에 추가했습니다.iOS -보기 당 한 번만 터치합니다.

터치했을 때보기의 CGRect에서 벗어나지 않는 한, 해당 지점의보기가 여러 번 표시됩니다. 나는 한 번만 다시 다음 CGRect에서 이동하지 않는 한 이동 뷰 이상하지가 고려 될 때 각 뷰를 참조하고 싶습니다 여기에 내 코드입니다 :.

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

    UITouch *myTouch = [touches anyObject]; 

    CGPoint point = [myTouch locationInView:self.view]; 

    UIView *movedView = [self viewAtPoint:point]; 

    if(movedView != nil) 
    { 
    NSLog(@"Touches Moved - %@",movedView.name); 
    } 
} 


-(UIView *) viewAtPoint:(CGPoint) point 
{ 
CGRect touchRect = CGRectMake(point.x, point.y, 1.0, 1.0); 

    for(UIView *c in viewArray.views){ 
     if(CGRectIntersectsRect(c.frame, touchRect)){ 
      return c; 
     }  
    } 
    return nil; 
} 

그래서 NSLog가 동일한보기를 여러 번 덤프 . 다시보기 밖으로 이동할 때까지보기 위로 이동할 때 한 번만 그것을 싶습니다.

제안 사항? 지난보기의

답변

1

보관할 트랙은 터치로 이동 것을, 그리고 당신은 터치가 먼저보기하면 계속 다른 사람에 대해 확인하기 전에, 확인하는 함수를 두 번

+0

때로는이 같은 전망 할 수있다 최적화 할 수 있습니다 행은 이동하지만보기가 바깥으로 가야하고 다시 두 번 계산해야합니다. 따라서 마지막 뷰를 추적하면 같은 뷰가 두 번 연속으로 표시되지 않습니다. – peace4theapes

+1

예, 움직일 때 그 뷰에 여전히 있는지 확인할 수 있습니다. 그렇지 않으면 currentView를 nil로 재설정 한 다음 원래 뷰로 다시 이동하면 새로운 히트로 등록됩니다 –

관련 문제