2017-12-21 34 views
0

말발굽 모양의 CAGradientLayer를 생성하고 있습니다. 그것은 경로를 복용하지 않는 것 같아요 그냥 그림자와 사각형을 그립니다. 내가 뭘 놓치고 있니?CAGradientLayer가 도형을 얻지 못합니다

let gradientLayerContainer = CAShapeLayer() 
     let gradient = CAGradientLayer() 
     let segmentGradientPath = UIBezierPath.horseshoe(
      center: centerPoint, 
      innerRadius: (bounds.width/2) - config.ringWidth, 
      outerRadius: bounds.width/2, 
      startAngle: segmentTapped.startAngle, 
      endAngle: segmentTapped.endAngle) 
     gradientLayerContainer.fillColor = UIColor.clear.cgColor 
     gradientLayerContainer.path = segmentGradientPath.cgPath 

     let end = centerPoint 
     let start = centerPoint.shifted(outerRadius, with: segmentTapped.centerAngle) 
     gradient.startPoint = CGPoint(x: start.x/bounds.width, y: start.y/bounds.height) 
     gradient.endPoint = CGPoint(x: end.x/bounds.width, y: end.y/bounds.height) 
     gradient.colors = [UIColor.white.withAlphaComponent(0.0).cgColor, UIColor.white.cgColor] 
     gradient.frame = segmentGradientPath.bounds 
     gradient.mask = gradientLayerContainer 
     gradient.locations = [0, 1] 


     horseshoeLayer.addSublayer(gradientLayerContainer) 
     gradientLayerContainer.insertSublayer(gradient, at: 0) 

답변

1

마스크는 그라디언트 레이어에 속합니다. 그라디언트 레이어는 마스크에 속하지 않습니다. 또한 마스크 색상은 그라디언트를 표시하고자하는 모든 곳에서 불투명해야합니다 (반대로 Clear를 사용하고 있습니다).

import PlaygroundSupport 
import UIKit 

let rect = CGRect(x: 0, y: 0, width: 300, height: 300) 
let gradient = CAGradientLayer() 
let maskLayer = CAShapeLayer() 
let maskPath = UIBezierPath(ovalIn: rect) 
maskLayer.fillColor = UIColor.black.cgColor 
maskLayer.path = maskPath.cgPath 
gradient.colors = [UIColor.blue.cgColor, UIColor.red.cgColor] 
gradient.mask = maskLayer 
gradient.locations = [0, 1] 

let view = UIView(frame: rect) 
view.layer.addSublayer(gradient) 
gradient.frame = view.bounds 
PlaygroundPage.current.liveView = view 
+0

최고, 당신은 짝짓기 감사합니다 :

다음은 올바른 계층 구조의 놀이터 예입니다! –