2017-09-11 5 views
1

그라디언트로 채워진 순환 진행률 막대를 그리려합니다. 다음과 같이 내 코드는 다음과 같습니다원형 GAGradient 레이어의 들쭉날쭉 한 가장자리

override func draw(_ rect: CGRect) { 
     let circlePath = UIBezierPath(arcCenter: CGPoint(x: rect.size.width/2.0, y: rect.size.height/2.0), radius: rect.size.height/2.0, startAngle: 0.0, endAngle: CGFloat.pi * 2.0, clockwise: true) 
     circleLayer.path = circlePath.cgPath 
     circleLayer.fillColor = UIColor.clear.cgColor 
     circleLayer.strokeColor = UIColor(hex: 0xCACACA).cgColor 
     circleLayer.lineWidth = 2.0 
     circleLayer.strokeEnd = 1.0 
     layer.addSublayer(circleLayer) 


     let circleCorrectPath = UIBezierPath(arcCenter: CGPoint(x: rect.size.width/2.0, y: rect.size.height/2.0), radius: rect.size.height/2.0, startAngle: CGFloat.pi * 3/2, endAngle: CGFloat.pi * 3/2 + CGFloat.pi * 2, clockwise: true) 
     progressCircleLayer.path = circleCorrectPath.cgPath 
     progressCircleLayer.fillColor = UIColor.clear.cgColor 
     progressCircleLayer.strokeColor = UIColor.black.cgColor 
     progressCircleLayer.lineWidth = 2.0 
     layer.addSublayer(progressCircleLayer) 

     let gradient = CAGradientLayer() 
     gradient.frame = rect 
     gradient.mask = progressCircleLayer 
     gradient.colors = [UIColor(red:0.52, green:0.83, blue:0.9, alpha:1).cgColor, 
           UIColor(red:0.25, green:0.67, blue:0.86, alpha:1).cgColor] 
     gradient.locations = [0, 1] 
     gradient.startPoint = CGPoint(x: 1, y: 0) 
     gradient.endPoint = CGPoint.zero 
     layer.addSublayer(gradient) 

    } 

이 그러나 작동이 그라디언트 레이어는 가장자리를 들쭉날쭉 한 것 같다 : 이미지에서

enter image description here

하단과 오른쪽 가장자리가 들쭉날쭉합니다. 여기서 내가 뭘 잘못하고 있니?

+0

progressCircleLayer.stokeEnd 1.0의 값은 무엇입니까? 파란색 레이어가 잘리는 것처럼 보이며 circleLayer 및 progressCircleLayer의 크기가 정확히 동일합니까? –

답변

1

문제는 CAGradientLayer이 아니라 CAShapeLayer (코드의 progressCircleLayer)으로 표시됩니다.

망막 장치에 대해 CAShapeLayer의 래스터 화 속성이 기본값 1로 설정되어 이미지가 흐릿하게 나타납니다.

progressCircleLayer.shouldRasterize = true 
progressCircleLayer.rasterizationScale = 2 * UIScreen.main.scale 
+0

나는 이것을 시도했다. 아직도 변화 없음. 어쨌든 시뮬레이터에서 실행 중이며, 비 망막 스크린입니다. – Kex