ios - 添加到 Stackview 子视图的 CAShapeLayers 仅在一个子视图上呈现
问题描述
和预计会显示一个黑色圆圈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
坐标...
推荐阅读
- angular - Angular Service Worker 未注册后未注册
- java - docker-compose:网络中的服务可以相互 ping,但 API 请求返回为空响应
- ios - 根据今天的日期显示一周中的特定日期
- c++ - 如何从父进程打印子进程列表
- python - 事件监听器如何在 Python 的 Turtle 模块中工作?为什么即使他们一直在后台收听,他们也不会阻塞?
- r - 在 `caret::rfe()` 中设置 `tuneLength`
- node.js - 对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。- 谷歌云功能,Vue3
- c++ - 调用者在调用函数 std::_Mutex_base::unlock 之前未能保持锁定
- git - 无法让 git 忽略文件和文件夹
- javascript - Markdown“目录”在角度 8 中不起作用