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

Posted

技术标签:

【中文标题】如何正确设置 MPVolumeView 的最大和最小图像【英文标题】:how to set the maximum and minimum image of MPVolumeView correctly 【发布时间】:2015-02-01 04:05:43 【问题描述】:

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

这是结果 以前有没有人遇到过这个问题,任何帮助都会很棒?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

它也吸引了我。命名不佳的方法 - 苹果真丢脸!【参考方案2】:

其实有一个很简单的方法:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何正确设置 MPVolumeView 的最大和最小图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中自定义 MPVolumeView?

如何自定义 MPVolumeView?

Swift:如何以编程方式设置 iphone 音量 [重复]

使用 MPVolumeView 后如何重新打开系统音量覆盖?

如何扩大 MPVolumeView 路由按钮区域?

带有 XCode 4 的 MPVolumeView(故事板)