如何在 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 椭圆?的主要内容,如果未能解决你的问题,请参考以下文章

使用swift在代码中的约束 - 无法激活

html CSS3方法:未知高度宽度居中

html CSS3方法:未知高度宽度居中

css 这将一个未知大小的图像在一个框内垂直和水平居中。包装盒具有明确的宽度和高度。这是一个h

网页制作图片怎么居中

如何根据swift 4或5中的图像大小使图像视图高度和宽度(纵横比)动态? [关闭]