2012-08-28 7 views
0

간단한 드로잉 기능을 앱에 추가하고 사용자가 파선을 그릴 수있게하려고합니다. 그리기 루틴을 제대로 작동하고, CAShapeLayer를 추가하고 경로를 설정했습니다.CAShapeLayer 드로잉 중 파선 만들기

그러나 파선을 그릴 때 대시는 사용자가 매우 빨리 그릴 때만 나타납니다. 내가 천천히 끌면 대시가 함께 모여서 선이 단색이됩니다.

단계 1. 새 그리기 레이어를 시작합니다. 일부 코드는 분명히 빠져 있습니다.

// CAShapeLayer 
// Dashed pattern is arbitrary - I've tried a variety of values 
[self.currentDrawLayer setLineDashPattern:[NSArray arrayWithObjects: 
              [NSNumber numberWithInt:6], 
              [NSNumber numberWithInt:12], 
              nil]]; 

currentPenPath = [UIBezierPath bezierPath];  
[currentPenPath moveToPoint:currentPoint]; 

2 단계. 사용자가 레이어를 그리고 업데이트 할 때 점을 추가합니다.

[currentPenPath addLineToPoint:currentPoint]; 
[currentPenPath moveToPoint:currentPoint]; 
[[self currentDrawLayer] setPath:currentPenPath.CGPath]; 

나는 사용자가 원하는 및 도면 동안 일관성있는 대시를 가지고 같은 느리거나 빠르게 그릴 수 있어야합니다. 나는 모든 포인트 또는 무엇인가를 먼저 부드럽게해야합니까?

사용자가 그릴 때 대시를 그릴 수있는 간단한 방법이 있습니까?

enter image description here

는 모든 지침은 감사합니다.

+0

경로를 후 처리하고 포인트를 제거해야하는 것처럼 들립니다. –

+0

나는 그것을 생각 해왔다. 나는 어떻게 든 동일한 곡선을 따르지만 점들이 균등하게 간격을 둔 새로운 경로를 만들어야한다. 나는 그것을 연구하는 방법을 모릅니다. – Christopher

답변

0

해결책을 찾았습니다. 하나는 그리기도하는 동안 작동합니다! 나는 이전 점 사이의 거리를 발견하고 나는 점을 추가하고 충분히 경우를 그릴 수 있습니다 피타고라스를 사용 How to draw Smooth straight line by using UIBezierPath?

:

일부 코드는 ...

else if (sender.state == UIGestureRecognizerStateChanged) 
{ 
    CGFloat distance = sqrtf(powf((point.x - currentPenPoint.x), 2) + powf((point.y - currentPenPoint.y), 2)); 

    if (distance > 20) // TODO: define magic number after some testing 
    { 
     currentPenPoint = point; 
     [self drawPenLine]; 
    } 

    <snip> 
} 

나는 다음과 같은 게시물을 참조 선. 이렇게하면 점선이 균등하게 배치됩니다.

+1

'sqrtf()'를 생략하고 거리 임계 값을 정사각형으로 정하십시오. 행동은 동일하지만보다 효율적입니다. –

관련 문제