为什么视图内容不居中?

时间:2015-11-18 16:46:22

标签: ios swift

这是我的结果

enter image description here

虽然我明确指出圆弧中心是视图的中心。

这是我的代码:

let count = colors.count-1
        var index: Int = initialIndex
        for oneArray in points {
            let startAngleRadiant: CGFloat = degreesToRadians(Double(oneArray[0]))
            let endAngleRadiant: CGFloat = degreesToRadians(Double(oneArray[1]))
            let radius: CGFloat = self.frame.height/4
            let path = UIBezierPath(arcCenter: center,
                radius: radius,
                startAngle: startAngleRadiant,
                endAngle: endAngleRadiant,
                clockwise: true)
            let color = UIColor(red: colors[count-index][0], green: colors[count-index][1], blue: colors[count-index][2], alpha: 1.0)
            path.lineWidth = CGFloat(4)
            if ++index >= count {
                index = 0
            }
            color.setStroke()
            path.stroke()
        }

视图(内部的圆圈)具有正确的高度和宽度约束。如你所见

enter image description here

这是视图Wainting Circle View的约束 如你所见,我设置相对于晚餐视图的高度和宽度, 因此,该视图的中心应该是正确的,因此,我使用的自我中心应该在中心绘制

enter image description here

1 个答案:

答案 0 :(得分:4)

您正在定义拱门的中心self.center,文档描述为:

  

中心在其超视图的坐标系内指定,并以磅为单位进行测量。设置此属性会相应地更改框架属性的值。

这与CGPoint(x: frame.midX, y: frame.midY)基本相同,这意味着如果您的视图不与超视图超级视图的顶部齐平,则center.x将与视图的中心不同

例如,如果您的视图有frame == CGRect(x:50, y:50, width:100, height:100),则视图的右下角会显示center == CGPoint(x: 50 + 100/2, y: 50 + 100 /2) == CGPoint(x:100, y:100)

如果您希望圆在视图的中心居中,则应根据边界选择中心,该边界位于视图相对坐标系中:

let center = CGPoint(x: bounds.midX, y: bounds.midY)

let path = UIBezierPath(arcCenter: center,
    radius: radius,
    startAngle: startAngleRadiant,
    endAngle: endAngleRadiant,
    clockwise: true)