2013-11-02 2 views
4

팬 제스처 인식기에 연결되는 UITextView가 있습니다. 손가락을 텍스트보기 위로 드래그하면 characterIndexForPoint 메서드를 사용하여 손가락이 어느 쪽인지 확인하고 손가락이 & 이상이면 그 지점의 텍스트를 강조 표시합니다.동일한 매개 변수에 대해 다른 결과를 반환하는 characterIndexForPoint

보기의 텍스트에 줄 바꿈이있는 경우이 메서드는 동일한 매개 변수를 전달하더라도 다른 결과를 반환하는 것처럼 보입니다. 터치 된 메서드는 한 번에 두 번 호출되며 charIndex는 167이고 그 다음에는 270입니다.

텍스트보기의 AttributedString을 검사했으며 두 경우 모두 글꼴 크기가 같습니다.

- (IBAction)touched:(UIPanGestureRecognizer *)sender { 
    if (self.txtView.isFirstResponder) { 
     return; 
    } 
    if (sender.state == UIGestureRecognizerStateChanged) { 

     CGPoint touchPoint = [sender locationInView:self.txtView]; 
     NSUInteger charIndex = [self.txtView.layoutManager 
        characterIndexForPoint:touchPoint 
          inTextContainer:self.txtView.textContainer 
    fractionOfDistanceBetweenInsertionPoints:0]; 
... 

알려진 버그입니까? 내가 뭔가 잘못하고 있는거야?

+0

'터치 된 메소드는 연속으로 두 번 호출되며, charIndex가 167이면 그 값은 270이됩니다 .' - 두 호출에서 모두 같은 'touchPoint'가 사용됩니까? –

+0

예 (이것이 "동일한 매개 변수를 전달하는"이유입니다) – Epaga

답변

3

한 가지 잘못된 점은 fractionOfDistanceBetweenInsertionPoints:이 0이 아니어야한다는 것입니다. 결과 매개 변수이므로 걱정하지 않으면 CGFloat 또는 NULL의 주소 여야합니다.

 CGPoint touchPoint = [sender locationInView:self.txtView]; 
    CGFloat fraction = 0; 
    NSUInteger charIndex = [self.txtView.layoutManager 
        characterIndexForPoint:touchPoint 
         inTextContainer:self.txtView.textContainer 
fractionOfDistanceBetweenInsertionPoints:&fraction]; 

는 나중에 fractionOfDistanceBetweenInsertionPoints:에 관심이되지 않을 수도 있습니다,하지만 당신이이 문제를 진단하는 데 도움이 할 수 있습니다. 당신이 지나가고있는 요점은 애매 모호 할 수 있으며 그 점을 이해하는 데 도움이 될 것입니다.

관련 문제