2016-11-09 4 views
0

Когда draw закомментирован внутри приведенного ниже кода, вид отображается круговым, но при его раскомментировании вид снова отображается как прямоугольник. Я мог бы прокомментировать тело draw, чтобы он был просто пустым, но представление все равно будет отображаться как прямоугольник.iOS округление UIView углы с включенной ничьей

Я попытался переместить cornerRadius линию до конца draw, начало draw и конец 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

FormLayer - это внутренний круг, поэтому он не имеет технически никаких углов. – stumped

+0

Уважаемый тупой, в настоящее время вы всегда добавляете новый слой к своему представлению, когда он перерисовывается (что может случиться довольно часто). Удалите старый слой или сохраните «старый» слой. – Lepidopteron

ответ

1

Добавьте следующее:

self.layer.masksToBounds = True

ниже линии:

self.layer.cornerRadius = self.frame. size.height/2.0

Кстати, есть некоторые проблемы, описанные вышеприведенными комментариями.

Смежные вопросы