UISlider手柄改变不同尺寸iPad上的宽度

时间:2017-01-19 05:16:38

标签: swift ipad interface-builder constraints uislider

我有一个垂直滑块,它使用以下代码在其自定义类中生成句柄图像:

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尺寸上使自定义滑块的图像手柄的宽度等于其超视图的宽度?

1 个答案:

答案 0 :(得分:1)

通过试用&错误我发现这是一个“时间问题”。在viewDidLoad中过早地绘制了手柄图像rect。

我的“黑客”解决方案是将绘制滑块手柄的函数放入按钮动作函数中,该函数调用要显示的视图(其中包含垂直滑块)。

添加定时延迟可能会解决同样的问题。两者都是黑客解决方案,我仍然不了解为什么在包含垂直滑块的VC中调用viewDidLoad之前无法识别正确的屏幕尺寸...

然而,这解决了这个问题。

相关问题