2016-11-09 5 views
0

draw 메서드가 아래 코드에서 주석 처리 될 때보기가 원형으로 표시되지만 주석 처리가 해제되면보기가 다시 사각형으로 표시됩니다. draw의 본문을 주석 처리하여 비어있는 메소드로 만들 수 있지만 뷰는 여전히 사각형으로 표시됩니다.iOS에서 그릴 수있는 UIView 모서리 반올림

나는 draw의 시작, draw의 마지막에 cornerRadius 라인을 이동했는데, drawInnerCircle의하지만 아무 소용이 종료했습니다. draw 메서드를 사용하여보기를 반올림하는 방법이 여전히 있는지 궁금합니다.

import UIKit 
class IconView: UIView { 

    override init(frame:CGRect) { 
     super.init(frame : frame) 
     self.backgroundColor = UIColor(red: 47/255, green: 49/255, blue: 53/255, alpha: 1.0) 
     self.layer.cornerRadius = self.frame.size.height/2.0 
    } 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override func draw(_ rect: CGRect) { 
     drawInnerCircle() 
    } 

    internal func drawInnerCircle() ->() { 
     let halfSize:CGFloat = min(self.frame.size.width/2, bounds.size.height/2) 
     let desiredLineWidth:CGFloat = 1 // your desired value 
     let circlePath = UIBezierPath(
      arcCenter: CGPoint(x:halfSize,y:halfSize), 
      radius: CGFloat(halfSize - 3), 
      startAngle: CGFloat(0), 
      endAngle:CGFloat(M_PI * 2), 
      clockwise: true) 

     let shapeLayer = CAShapeLayer() 
     shapeLayer.path = circlePath.cgPath 
     shapeLayer.fillColor = UIColor.clear.cgColor 
     shapeLayer.strokeColor = UIColor(red: 96/255, green: 99/255, blue: 105/255, alpha: 1.0).cgColor 
     shapeLayer.lineWidth = desiredLineWidth 
     layer.addSublayer(shapeLayer) 
    } 
} 
+0

'shapeLayer'코너도 지정하려고 했습니까? – Tj3n

+0

shapeLayer는 안쪽 원이므로 기술적으로 모서리가 없습니다. – stumped

+0

친숙하지 않습니다. 현재는 새로운 레이어를 다시 그릴 때 항상 새 레이어를 추가합니다 (꽤 자주 발생할 수 있음). 이전 레이어를 제거하거나 "이전"레이어를 제 위치에 두십시오. – Lepidopteron

답변

1

는 다음을 추가 라인 아래

사실

self.layer.masksToBounds =

self.layer.cornerRadius = self.frame합니다. 크기. 높이/2.0

그런데 위의 의견에 설명 된 문제가 있습니다.