我有一个垂直滑块,它使用以下代码在其自定义类中生成句柄图像:
func generateHandleImage(with color: UIColor) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: (superview?.bounds.size.height)! * 0.07,
height: (superview?.bounds.size.width)!)
return UIGraphicsImageRenderer(size: rect.size).image { (imageContext) in
imageContext.cgContext.setFillColor(color.cgColor)
imageContext.cgContext.fill(rect.insetBy(dx: 0, dy: 0))
}
}
我在滑块中设置了IB的自动布局约束,使其在x&它的超视图的y轴和相等的宽度和高度与它的超视图的高度和宽度(因为它是一个垂直滑块)。
这是使我的滑块垂直并调用函数生成句柄图像的代码:
// Make Sliders Vertical
let sliderTransform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2) + CGFloat(M_PI))
pitchBendSlider.transform = sliderTransform
pitchBendSlider.setThumbImage(pitchBendSlider.generateHandleImage(with: .white), for: .normal)
我希望句柄图像等于它的超视图的宽度。它在iOS模拟器中的iPad Air 2上正确实现,但在iPad Pro 12.9“上它大约是superview宽度的80-90%,而在iPad Air上它比superview的宽度略大。
如何在所有iPad尺寸上使自定义滑块的图像手柄的宽度等于其超视图的宽度?
答案 0 :(得分:1)
通过试用&错误我发现这是一个“时间问题”。在viewDidLoad
中过早地绘制了手柄图像rect。
我的“黑客”解决方案是将绘制滑块手柄的函数放入按钮动作函数中,该函数调用要显示的视图(其中包含垂直滑块)。
添加定时延迟可能会解决同样的问题。两者都是黑客解决方案,我仍然不了解为什么在包含垂直滑块的VC中调用viewDidLoad
之前无法识别正确的屏幕尺寸...
然而,这解决了这个问题。