2017-03-13 4 views
0

私は、カスタムテクスチャを作成するために、カスタムUIViewでdraw関数を使用しています。問題は、幅と高さがUIStackViewによって決定されることです。私が使用するビューを作成するときCustomView(frame: CGRect(x: 0, y: 0, width: 50, height: 50, color: color)実際の幅と高さが不明な場合、カスタムUIViewはdraw関数を使用します。 UIBezierPathがUIStackViewによって与えられた境界の中央にあることを保証する方法はありますか?Swiftで未知の幅と高さのビュー内にUIBezierPathの楕円を配置する方法はありますか?

import Foundation 
import UIKit 
class CustomView: UIView { 

     let color: UIColor 

     required init(coder aDecoder: NSCoder) { 
      color = UIColor() 
      super.init(coder: aDecoder)! 
     } 
     init(frame: CGRect, color: UIColor) { 
      self.color = color 
      super.init(frame: frame) 
      self.backgroundColor = UIColor.init(hexString: CustomColors.pale_blue) 
     } 

     override func draw(_ rect: CGRect) { 

      color.setFill() 
      color.setStroke() 
      let width = Int(rect.size.width) 
      let height = Int(rect.size.height) 
      let yValue = Int(rect.origin.y) 
      let xValue = Int(rect.origin.x) 
      let rectBottom = UIBezierPath(rect: CGRect(x: xValue , y: yValue + height - (height/4), width: width, height: height/4)) 
      let ovalTop = UIBezierPath(ovalIn: CGRect(x: xValue + (width/4), y:yValue + (height/3), width: width/2, height: height/2)) 
      rectBottom.stroke() 
      rectBottom.fill() 
      ovalTop.fill() 
      ovalTop.stroke() 
     } 
} 

答えて

1

描画メソッドが呼び出された時点で、レイアウトは既に発生しています。 draw()内のself.boundsを見てください。 明確にするには、描画するために渡された矩形を見て、ジオメトリを決定しないでください。更新する必要があるビットだけを再描画したい場合は、その矩形を使用します。

関連する問題