2017-03-05 2 views
1

UIBezierPath을 사용하여 채우기 스타일을 채우기 위해 Swift 3.0에 색칠 앱을 구현하고 있습니다. UIBezierPath 스트로크는 touchesMoved에서 여러 번 다시 그립니다.

touchFillPath = UIBezierPath() 

각각의 새로운 포인트 touchesMoved I 스트로크로의

:

touchFillPath.addLine(to: location) 
touchFillPath.stroke() 

있지만 경로 결과가 동일한 영역 위에 여러 번 스트로크, 따라서 선택된 touchesBegan에서 I 경로를 만들 색상 불투명도가 변경됩니다.

터치 할 때마다 색깔이 표시된 영역을 볼 수 있도록 각 touchesMoved 호출에 대한 경로를 획 처리해야합니다.

동일한 영역을 여러 번 재정의하지 않고 동일한 경로를 여러 번 획정하려면 어떻게해야합니까?

touchFillPath.removeAllPoints() 
touchFillPath.move(to: location) 
+0

"이 결과는 p ath가 같은 영역 위에 여러 번 칠해서 선택한 색상 불투명도가 변경됩니다. "그렇다면이 이미지를 touchesMoved 또는 이와 비슷한 이미지로 렌더링해야합니다. 문제는 경로의 '획'이 아니기 때문에 더 넓은 맥락에서 무엇을하는지,이 질문에 대답하기 위해 더 많은 컨텍스트가 필요합니다. 그러나 대답은 (a) 단지 마지막 위치에서 새로운 경로로 매번 획을 긋을 것입니다; 또는 (b) 새로운 이미지를 만들지 마십시오 (또는 무엇이든). 더 많은 문맥없이 말하기가 어렵다. – Rob

답변

2

@joeybladb 내가 솔루션을 시도하지만, 각 '는 touchesMoved'조치를 작은 세그먼트를 그립니다

2

touchFillPath.stroke() 후에는 경로를 다시 설정해야합니다.

그래서 나는 배열에 감동을 모든 지점에 저장하고,이 문제를 해결하려면 : touchFillPath.removeAllPoints()를 호출 한 후

pathPoints.append(NSValue(cgPoint:location)) 

와, 나는 경로를 다시 모든 포인트를 추가 : 그래서

for (index, element) in (pathPoints.enumerated())! { 
    let point = element.cgPointValue 
    if index == 0 { 
     touchFillPath.move(to: point) 
    } else { 
     touchFillPath.addLine(to: point) 
    } 
} 

그 다음 번에 touchFillPath.stroke()으로 전화하면 전체 경로를 따라 가게됩니다.

touchFillPath.move(to: lastPoint) 
touchFillPath.addLine(to: location) 
touchFillPath.stroke() 
관련 문제