如何在 Swift 中未知宽度和高度的视图中居中 UIBezierPath 椭圆?
Posted
技术标签:
【中文标题】如何在 Swift 中未知宽度和高度的视图中居中 UIBezierPath 椭圆?【英文标题】:How to center a UIBezierPath oval within a view of unknown width and height in Swift? 【发布时间】:2017-03-13 01:10:34 【问题描述】:我在自定义 UIView 中使用绘图功能来创建自定义纹理。问题是宽度和高度由 UIStackView 确定。当我创建视图时,我使用CustomView(frame: CGRect(x: 0, y: 0, width: 50, height: 50, color: color)
如果在自定义 UIView 时实际宽度和高度未知,则使用绘图功能。有没有办法保证 UIBezierPath 在 UIStackView 给出的范围内居中?
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方法被调用的时候,布局已经发生了。只需查看 draw() 中的 self.bounds。 需要明确的是,不要查看传递给 draw 的 rect 以确定您的几何形状。如果您只想重绘需要更新的位,您只会使用该矩形。
【讨论】:
以上是关于如何在 Swift 中未知宽度和高度的视图中居中 UIBezierPath 椭圆?的主要内容,如果未能解决你的问题,请参考以下文章