我是iOS开发的新手,我正在尝试在UIView中显示一个10x10的网格,以尊重其边界,我希望根据设备的可用宽度/高度来计算圆圈。

到目前为止,我没有运气尝试过什么:

func setUpPoints() {
    let matrixSize = 10
    let diameter = (min(painelView.frame.size.width, painelView.frame.size.height) / CGFloat(matrixSize + 1)).rounded(.down)
    let radius = diameter / 2

    for i in 0...matrixSize {

        for j in 0...matrixSize {
            let x = CGFloat(i) * diameter + radius
            let y = CGFloat(j) * diameter + radius
            let frame = CGRect(x: x, y: y, width: diameter, height: diameter)
            let circle = Circle(frame: frame)
            circle.tag = j * matrixSize + i + 1
            painelView.addSubview(circle)

        }
    }

}

我的目标是按比例分布灰色矩形内的圆,使其看起来像Android模式锁定屏幕:

ios - 如何计算圆形矩阵的正确位置以适合具有比例间隙的给定 View ?-LMLPHP

有人可以给我一些指示吗?

谢谢。

最佳答案

如果我了解您要执行的操作,请执行以下操作:

let radius = (painelView.frame.size.width + painelView.frame.size.height) / CGFloat(matrixSize * 2)

应该:
let radius = (min(painelView.frame.size.width, painelView.frame.size.height) / CGFloat(matrixSize + 1)).rounded(.down)

上面的更改将允许圆的“正方形”适合较小的范围(视图的宽度或高度),从而使“正方形”周围的间隙等于每个圆的直径的一半。

您还需要更改两个循环以0开头。
for i in 0..<matrixSize {
    for j in 0..<matrixSize {

顺便说一句-您的radius变量实际上就是diametergap实际上是radius

以下代码在圆角的正方形周围提供了边框,并且在圆角之间包括了一些空间。根据需要进行调整。
func setUpPoints() {
    let matrixSize = 10
    let borderRatio = CGFloat(0.5) // half a circle diameter - change as desired
    let gapRatio = CGFloat(0.25) // quarter circle diameter - change as desired
    let squareSize = min(painelView.frame.size.width, painelView.frame.size.height)
    let diameter = (squareSize / (CGFloat(matrixSize) + 2 * borderRatio + CGFloat(matrixSize - 1) * gapRatio)).rounded(.down)
    let centerToCenter = (diameter + diameter * gapRatio).rounded(.down)
    let borderSize = (diameter * borderRatio).rounded()

    for i in 0..<matrixSize {
        for j in 0..<matrixSize {
            let x = CGFloat(i) * centerToCenter + borderSize
            let y = CGFloat(j) * centerToCenter + borderSize
            let frame = CGRect(x: x, y: y, width: diameter, height: diameter)
            let circle = Circle(frame: frame)
            circle.tag = j * matrixSize + i + 1
            painelView.addSubview(circle)
        }
    }
}

关于ios - 如何计算圆形矩阵的正确位置以适合具有比例间隙的给定 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41027251/

10-10 00:57