2009-10-20 1 views
0

내가 더 나은 접촉을 이해하려고 노력하고 접촉 :아이폰 SDK는 접촉을 추적 할 몇 라이너를 작성하여 이벤트

- (void)drawRect:(CGRect)rect { 
NSLog (@"My draw"); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2); 
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 

CGContextMoveToPoint(context, prev.x, prev.y); 
CGContextAddLineToPoint(context, cur.x, cur.y); 
    CGContextStrokePath(context); 
return; 
} 

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

UITouch *touch = [touches anyObject]; 
prev = [touch previousLocationInView:self]; 
cur = [touch locationInView:self]; 

[self setNeedsDisplayInRect:CGRectMake (prev.x, prev.y, fabs (cur.x-prev.x), fabs (cur.y - prev.y))]; 
} 

그것은 단지에 긍정적 인에서 운동 동작으로 내 setNeedsDisplay이 ​​정확하지 분명 음의 좌표 (왼쪽 위부터 오른쪽 아래). 이 질문 :

  1. 내가 (등 X를 NEG을 볼때 X에서 X, Y를 NEG하는 POS의 X, Y)에서 개별적으로 잠재적 인 이동 방향의 4 가지 경우에 setNeedsDisplay를 작성해야 나타납니다. 이것이 올바른 접근 방법인가, 아니면 근본적인 부분을 놓치고 있는가?

  2. 정확한 움직임에도 불구하고 선은 단단하지 않고 오히려 깨졌습니다 (손가락 추적 속도에 따라 다름). 운동을 추적하는 데 견고한 선이없는 이유는 무엇입니까?

고마워요!

+2

그들 중 하나로부터 단 하나의 답을 수락하지 않았습니다. 이것은 다른 사람들이 당신에게 어떤 대답을 제공하는데 시간을 할애하지 못하게 할 수 있습니다. 그냥 머리를 올려. –

답변

1

setNeedsDisplay 즉시 drawRect을 호출하지 않습니다. 실제로, touchesMoved은 다음 번에 뷰를 그릴 때까지 여러 번 호출 될 수 있으므로 파선이 표시됩니다.

0

CGRectMake에 대한 귀하의 호출해야한다 :

내 코드에서
CGRectMake (MIN(cur.x, prev.x), MIN (cur.y, prev.y), fabs (cur.x-prev.x), fabs (cur.y - prev.y)) 

, 내가 예를 들어, 임의의 두 점에서 구형 영역을 만들 수있는 기능이 일반화 : 당신은 17 개 질문 한

CGRect rectWithPoints(CGPoint a, CGPoint b) 
{ 
return CGRectMake(
    MIN (a.x, b.x), 
    MIN (a.y, b.y), 
    fabs (a.x - b.x), 
    fabs (a.y - b.y)); 
} 
+0

감사합니다. 시험해 보겠습니다. 그것은 여전히 ​​파손 된 라인을 돕지 않을 것입니다. 웹에서 각 화면을 각 선분 다음에 이미지로 기억한 다음 이미지를 렌더링하고 다음 이동 집합을 추가하는 튜토리얼을 웹에서 찾았습니다. 이 접근 방식은 setNeedsDisplay를 전혀 필요로하지 않습니다. – leon

관련 문제