如何调整所有屏幕尺寸的视图?
How to resize a view across all screen sizes?
我正在创建一个简单的计时器应用程序,并希望将计时器圆圈的大小调整为圆角视图的大小。定时器路径添加到背景视图中 class.
在我的 iPhone XS Max 上,它看起来像这样:
但是,在 iPhone SE 模拟器上,它看起来像这样:
如何确保计时器圈正确调整大小?
这是我的圆形路径大小代码:
private func addTimerCircle() {
let translateAmount = -(CGFloat.pi/2)
let circlePath = UIBezierPath(arcCenter: CGPoint.zero, radius: (self.frame.width - 64)/2, startAngle: translateAmount, endAngle: (2*CGFloat.pi)+translateAmount, clockwise: true)
addTrackLayer(withPath: circlePath)
}
private func addTrackLayer(withPath circlePath: UIBezierPath) {
let trackLayer = CAShapeLayer()
trackLayer.path = circlePath.cgPath
trackLayer.strokeColor = UIColor.red.withAlphaComponent(0.5).cgColor
trackLayer.lineWidth = 10
trackLayer.position = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
trackLayer.fillColor = UIColor.clear.cgColor
layer.addSublayer(trackLayer)
}
为什么 circlePath
不会根据 frame.width
在不同的屏幕尺寸上调整大小?
感谢您的帮助!
视图控制器视图以它们在 Interface Builder 中的大小加载,一旦将它们添加到层次结构中,视图就会调整为实际大小。
我猜你是在 viewDidLoad()
上调用 addTimerCircle()
,这发生在应用最终尺寸之前。
您可以重写 viewDidLayoutSubviews()
,它会在视图大小更改时调用,add/update 那里的形状,但我的建议是继承 UIView
,添加形状图层作为 属性,并在 layoutSubviews
.
上更新它的帧
我正在创建一个简单的计时器应用程序,并希望将计时器圆圈的大小调整为圆角视图的大小。定时器路径添加到背景视图中 class.
在我的 iPhone XS Max 上,它看起来像这样:
但是,在 iPhone SE 模拟器上,它看起来像这样:
如何确保计时器圈正确调整大小?
这是我的圆形路径大小代码:
private func addTimerCircle() {
let translateAmount = -(CGFloat.pi/2)
let circlePath = UIBezierPath(arcCenter: CGPoint.zero, radius: (self.frame.width - 64)/2, startAngle: translateAmount, endAngle: (2*CGFloat.pi)+translateAmount, clockwise: true)
addTrackLayer(withPath: circlePath)
}
private func addTrackLayer(withPath circlePath: UIBezierPath) {
let trackLayer = CAShapeLayer()
trackLayer.path = circlePath.cgPath
trackLayer.strokeColor = UIColor.red.withAlphaComponent(0.5).cgColor
trackLayer.lineWidth = 10
trackLayer.position = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
trackLayer.fillColor = UIColor.clear.cgColor
layer.addSublayer(trackLayer)
}
为什么 circlePath
不会根据 frame.width
在不同的屏幕尺寸上调整大小?
感谢您的帮助!
视图控制器视图以它们在 Interface Builder 中的大小加载,一旦将它们添加到层次结构中,视图就会调整为实际大小。
我猜你是在 viewDidLoad()
上调用 addTimerCircle()
,这发生在应用最终尺寸之前。
您可以重写 viewDidLayoutSubviews()
,它会在视图大小更改时调用,add/update 那里的形状,但我的建议是继承 UIView
,添加形状图层作为 属性,并在 layoutSubviews
.