2017-12-26 8 views
0

私は円の形をしたCAShapeLayerを作成しました。私はビュー内にあるボタンの周りに追加したいと思います。私はアニメーションの目的のために、国境の代わりにこれをやっています。私はボタンの周りに境界線が必要ない、私はむしろ形状を持っていただろう。これを追加する方法ですが、何らかの理由でボタンの周りに直接シェイプを追加していません。ボタンの周りにCAShapeLayerを追加する

これは層

recordLine = CAShapeLayer() 
let circularPath = UIBezierPath(arcCenter: recordButton.center, radius: recordButton.frame.width/2, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true) 
recordLine.path = circularPath.cgPath 
recordLine.strokeColor = UIColor.white.cgColor 
recordLine.fillColor = UIColor.clear.cgColor 
recordLine.lineWidth = 5 
view.layer.addSublayer(recordLine) 

を追加するための私のコードですこれは、何らかの理由で行を追加する方法です。 Actual position of the layer

答えて

2

ように変更。

は、シェイプレイヤーを追加する前に、単一の行を追加してください:self.view.layoutIfNeeded()

@IBOutlet weak var roundButton: UIButton! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     roundButton.layer.cornerRadius = 50.0 
     roundButton.clipsToBounds = true 
     roundButton.alpha = 0.5 
     self.view.layoutIfNeeded() 

     let recordLine = CAShapeLayer() 
     let circularPath = UIBezierPath(arcCenter: roundButton.center, radius: roundButton.frame.width/2, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: false) 
     recordLine.path = circularPath.cgPath 
     recordLine.strokeColor = UIColor.black.cgColor 
     recordLine.fillColor = UIColor.clear.cgColor 
     recordLine.lineWidth = 10 
     view.layer.addSublayer(recordLine) 

    } 

これは私のために働いている参照画像enter image description here を確認してください。

+0

今はボタンの下に追加していますが、まだ動作していません – vApp

+0

私は答えを確認してください。クラスプロパティをnilに代入し、オーバーライドfunc viewDidLayoutSubviews()メソッドにnilのチェックを付けて書き込むと、メモリが一度割り当てられて追加されます。 –

+0

はいimはview.layoutIfNeeded()を呼び出していましたが、上に移動するのではなくボタンの下に移動するだけでした。それはボタンの周りにそれを表示されていません – vApp

0

//これはあなたのために働くことを望みます。 注:あなたが適切に自動レイアウト拘束をレンダリングする前にシェイプレイヤーを追加しているので、色やその他のプロパティは、これが起こっているあなたの条件

let shapeLayer = CAShapeLayer() 
    shapeLayer.backgroundColor = UIColor.clear.cgColor 
    shapeLayer.name = "Star" 
    let path: CGPath = UIBezierPath(arcCenter: recordButton.center, radius: recordButton.frame.width/2, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true) 
    shapeLayer.path = path 
    shapeLayer.lineWidth = 5.0 
    self.layer.mask = shapeLayer 
+0

これは私が探しているものではありません – vApp

関連する問題