업데이트 02 작업 솔루션을 가지고 ... 내가 다른 UIView의에 마스크로 UIBezierPath의 스트로크를 사용하는 것을 시도하고있다마스크의 UIView - 스트로크 만
. 많은 예가 있지만, 모두 채우기를 사용하여보기를 자릅니다.
경로의 스트로크 만 사용하려하지만 올바르게 표시되지 않습니다. 위의 코드는이 작업을 수행,
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: 100, y: 100))
bezierPath.addLine(to: CGPoint(x: 200, y: 50))
bezierPath.addLine(to: CGPoint(x: 300, y: 100))
bezierPath.lineWidth = 5.0
bezierPath.stroke()
let gradient = Gradient(frame: self.bounds)
let mask = CAShapeLayer()
mask.path = bezierPath.cgPath
gradient.layer.mask = mask
self.addSubview(gradient)
을하지만 : 아래
내가 현재 스위프트 3.X에있는 것입니다. 나는 마스크 스트로크를 사용하는 경우에만 찾고 있어요 ...이 코드는 현재이
는 (더 많은 포인트를 가지고 원하는 결과 ..입니다
을하고있는 것입니다 이 컴 스냅 샷에서)
나는 더 좋은 방법이 있을지도 모르고, 어떤 생각이나 대안을 생각할 수 있습니다!
--update 01--
내 최신하지만, 마스크 밖으로 모든 :
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: 100, y: 100))
bezierPath.addLine(to: CGPoint(x: 200, y: 50))
bezierPath.addLine(to: CGPoint(x: 300, y: 100))
bezierPath.lineWidth = 5.0
bezierPath.stroke()
let gradient = Gradient(frame: self.bounds)
UIGraphicsBeginImageContext(CGSize(width: gradient.bounds.width, height: gradient.bounds.height))
let context : CGContext = UIGraphicsGetCurrentContext()!
context.addPath(bezierPath.cgPath)
let image = UIGraphicsGetImageFromCurrentImageContext()
gradient.layer.mask?.contents = image?.cgImage
그리고 .. 가지고 갑자기 CAShapeLayer 그것을 알아 내려고 후 :
let mask = CAShapeLayer()
mask.fillColor = UIColor.black.cgColor
mask.strokeColor = UIColor.black.cgColor
mask.fillRule = kCAFillModeBoth
mask.path = bezierPath.cgPath
gradient.layer.mask = mask
self.addSubview(gradient)
--update 02 - 워킹 솔루션 - 모든 사람의 도움을
감사합니다!
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: 100, y: 300))
bezierPath.addLine(to: CGPoint(x: 200, y: 50))
bezierPath.addLine(to: CGPoint(x: 300, y: 200))
bezierPath.addLine(to: CGPoint(x: 400, y: 100))
bezierPath.addLine(to: CGPoint(x: 500, y: 200))
let gradient = Gradient(frame: self.bounds) // subclass of UIView
let mask = CAShapeLayer()
mask.fillColor = nil
mask.strokeColor = UIColor.black.cgColor
mask.path = bezierPath.cgPath
mask.lineWidth = 5.0
gradient.layer.mask = mask
self.addSubview(gradient)
은 그리고, 결과는 I가 원하는 하였다 무엇 :
코드를 사용하는 위치를 말하지 않습니다. –
UIView의 하위 클래스에 캡슐화 – August
스트로크 된 패스를 UIImage로 렌더링 한 다음 UIImage를 마스크로 사용해야 할 수도 있습니다. – ekscrypto