如何正确设置MPVolumeView的最大最小图片

how to set the maximum and minimum image of MPVolumeView correctly

我正在尝试设置 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)

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

你写的代码很好,但是,你误解了setMinimumVolumeSliderImagesetMaximumVolumeSliderImage实现的功能。这些方法是为了实际设置控件的轨迹图像。

您正在寻找与 UISlider 上的 minimumValueImagemaximumValueImage 相当的内容。不幸的是,MPVolumeView 没有这样的方法。

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

您可以通过外观方法为 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"]];
}

Swift:

UISlider.appearance(whenContainedInInstancesOf: [MPVolumeView.self]).minimumValueImage = UIImage(systemName: "speaker.fill")
UISlider.appearance(whenContainedInInstancesOf: [MPVolumeView.self]).maximumValueImage = UIImage(systemName: "speaker.wave.3.fill")

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

if let volumeSliderView = volumeView.subviews.first as? UISlider {
    volumeSliderView.minimumValueImage = #imageLiteral(resourceName: "icon_music_volume_min")
    volumeSliderView.maximumValueImage = #imageLiteral(resourceName: "icon_music_volume_max")
}