2016-11-09 11 views
0

drawメソッドが以下のコードの中にコメントアウトされている場合、ビューは円形に表示されますが、コメントアウトされていない場合はビューが再び矩形として表示されます。 drawの本文をコメントアウトして空のメソッドにすることはできますが、ビューは四角形として表示されます。描画が有効になっているUIViewの角を丸める

私は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

shapeLayerは内側の円であり、技術的にコーナーがありません – stumped

+0

あまりにも面倒です。現在は、新しいレイヤーを再描画するときに常に表示するようにしています。古いレイヤーを削除するか、古いレイヤーをそのまま使用してください。 – Lepidopteron

答えて

1

次の行を追加します。

self.layer.masksToBounds =行の下に真

self.layer.cornerRadius = self.frame。サイズ。高さ/ 2.0

ところで、上記コメントで説明した問題があります。

関連する問題