5

我正在尝试设置 MPVolumeView 的最大和最小图像,但我无法让它工作

这是代码

VolumeView.setVolumeThumbImage(UIImage(named: "VolumeSlider"), forState: UIControlState.Normal)
VolumeView.setMinimumVolumeSliderImage(UIImage(named: "VolumeUp"), forState: UIControlState.Normal)
VolumeView.setMaximumVolumeSliderImage(UIImage(named: "VolumeDown"), forState: UIControlState.Normal)

这是结果 以前有人遇到过这个问题吗,有什么帮助会很大吗?

4

3 回答 3

9

您编写的代码很好,但是,您误解了什么setMinimumVolumeSliderImagesetMaximumVolumeSliderImage实现了。这些方法用于实际设置控件的轨迹图像。

您正在寻找与minimumValueImagemaximumValueImageon类似的东西UISlider。不幸的是,MPVolumeView没有这样的方法。

唯一的解决方法是定位UIImageView体积视图的任一侧以显示您的图像。这样做的缺点是路线按钮会妨碍最大值图像,因此您必须进行设置showsRouteButton = NO;以防止这种情况发生。

于 2015-03-09T09:55:45.943 回答
5

实际上有一个非常简单的方法可以做到这一点:

if let volumeSliderView = volumeView.subviews.first as? UISlider {
    volumeSliderView.minimumValueImage = #imageLiteral(resourceName: "icon_music_volume_min")
    volumeSliderView.maximumValueImage = #imageLiteral(resourceName: "icon_music_volume_max")
}
于 2016-12-13T15:21:34.817 回答
4

您可以通过外观方法设置 MPVolumeView 的最小和最大值图像。以下是如何在Objective-C中执行此操作:

如果您只支持 iOS 9.0+:

[[UISlider appearanceWhenContainedInInstancesOfClasses:@[[MPVolumeView class]]] setMinimumValueImage:[UIImage imageNamed:@"VolumeDown"]];
[[UISlider appearanceWhenContainedInInstancesOfClasses:@[[MPVolumeView class]]] setMaximumValueImage:[UIImage imageNamed:@"VolumeUp"]];

或者对于 5.0 之后的任何 iOS 版本:

if( [UISlider respondsToSelector:@selector(appearanceWhenContainedInInstancesOfClasses:)] )
{
   [[UISlider appearanceWhenContainedInInstancesOfClasses:@[[MPVolumeView class]]] setMinimumValueImage:[UIImage imageNamed:@"VolumeDown"]];
   [[UISlider appearanceWhenContainedInInstancesOfClasses:@[[MPVolumeView class]]] setMaximumValueImage:[UIImage imageNamed:@"VolumeUp"]];
}
else
{
   [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumValueImage:[UIImage imageNamed:@"VolumeDown"]];
   [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumValueImage:[UIImage imageNamed:@"VolumeUp"]];
}

斯威夫特

UISlider.appearance(whenContainedInInstancesOf: [MPVolumeView.self]).minimumValueImage = UIImage(systemName: "speaker.fill")
UISlider.appearance(whenContainedInInstancesOf: [MPVolumeView.self]).maximumValueImage = UIImage(systemName: "speaker.wave.3.fill")
于 2016-08-31T19:20:36.130 回答