2017-01-04 3 views
1

나는 불투명 한 획과 투명한 채우기로 CAShapeLayer을가집니다. 그런 다음 myContext.drawRadialGradient으로 전화를 걸지만이 모양 그라디언트 클립을 제 모양 레이어의 선에 연결하십시오. 현재 myShapeLayer.path.addClip()을 호출합니다.이 반지름 그라디언트 그라디언트는 획 대신에 모양 레이어의 채우기 영역을 잘라냅니다.불투명 클립 드로잉 (획) CAShapeLayer 부분

은 즉, 나는 레이어 또는 단지 스트로크 (내 경우에는 같은 것) 중 하나 단지 불투명 한 부분을 사용하고, 현재 컨텍스트를 클립으로 사용하고 싶습니다. CoreGraphics 문서를 잠시 동안 검색해 보았습니다.

답변

1

내 대답을 찾았습니다. 당신은 당신이 하나를 기존의 사본은 아래로, 뇌졸중으로하는 새로운 UIBezierPath 만들 수 있습니다

let strokePath = UIBezierPath(cgPath: oldPath.cgPath.copy(
    strokingWithWidth: ..., lineCap: ..., lineJoin: ..., miterLimit: ...)) 
strokePath.addClip() 
0

을 당신이 당신의 그라디언트 레이어의 마스크로 모양 레이어를 추가하면? 이것이 마스크 레이어가해야하는 일이기 때문에 효과가 있습니다.

그래도 작동하지 않는다면 모양 레이어를 이미지로 캡처하고 THAT을 그라디언트 레이어의 마스크로 설치해야 할 수 있습니다.

+0

그라데이션 레이어 인 경우 작동합니다. 불행히도'CAGradientLayer'는 선형 그래디언트 만 지원합니다. 그래서 방사형을 필요로합니다. 그래서 같은 방식으로 마스크를 사용하지 않는'context.drawRadialGradient'를 사용해야합니다. – Connor

0

획 경로를 원래 획과 동일한 채우기 영역으로 새 경로로 변환하십시오. 이제 클리핑 영역으로 사용할 수있는 채우기 영역이 있습니다. 이 작업을 수행하는 CGContext 방법은 replacePathWithStrokedPath을 호출하는 것입니다. 명시 적으로 문서가 말하는 것처럼 :

는 예를 들어, 함수 clip()의 호출에 의해 다음에이 함수를 호출하여 경로의 획이 버전의 클립 수 있습니다.