该calorieView
和timeView
预期显示黑色圆圈。但是distanceView
正在显示预期的黑色圆圈。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a
let allViews: [UIView] = [distanceView, calorieView, timeView]
let stackView = UIStackView(arrangedSubviews: allViews)
stackView.frame = view.frame
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.spacing = 0
let y1 = CGFloat(0)
let y2 = view.frame.height / 3
let y3 = y2 * 2
distanceView.frame = CGRect(x: 0, y: y1, width: view.frame.width, height: y2)
calorieView.frame = CGRect(x: 0, y: y2, width: view.frame.width, height: y2)
timeView.frame = CGRect(x: 0, y: y3, width: view.frame.width, height: y2)
distanceView.layer.addSublayer(self.createViewLayer(localView: distanceView))
calorieView.layer.addSublayer(self.createViewLayer(localView: calorieView))
timeView.layer.addSublayer(createViewLayer(localView: timeView))
view.addSubview(stackView)
}
func createCircleLayer(center: CGPoint, radius: CGFloat, clockWise:Bool) -> CAShapeLayer {
let shapeLayer = CAShapeLayer()
let path = UIBezierPath
(arcCenter: center, radius: radius, startAngle: 0,
endAngle: 2 * CGFloat.pi, clockwise: clockWise)
shapeLayer.path = path.cgPath
return shapeLayer
}
func createViewLayer(localView: UIView) -> CAShapeLayer {
print(localView)
var viewLayer = CAShapeLayer()
viewLayer.frame = localView.frame
let center = localView.center
print(center)
let radius = localView.frame.height / 3
let isClockwise = true
viewLayer = self.createCircleLayer
(center: center, radius: radius, clockWise: isClockwise)
return viewLayer
}
}
你做错的是y
为你的视图设置坐标,基本上是做垂直UIStackView
会做的工作。
当使用堆栈视图所有视图应该x
和y
坐标设置为0,0
,因为这将是最多UIStackView
到位置arrangedViews
根据它的设置。
只需更改您的框架以使用origin = (0,0)
或不使用UIStackView
并使用计算出的y
坐标...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句