如何正确设置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)
这是结果
以前有没有人遇到过这个问题,有什么帮助会很好吗?
你写的代码很好,但是,你误解了setMinimumVolumeSliderImage
和setMaximumVolumeSliderImage
实现的功能。这些方法是为了实际设置控件的轨迹图像。
您正在寻找与 UISlider
上的 minimumValueImage
和 maximumValueImage
相当的内容。不幸的是,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")
}
我正在尝试设置 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)
这是结果
你写的代码很好,但是,你误解了setMinimumVolumeSliderImage
和setMaximumVolumeSliderImage
实现的功能。这些方法是为了实际设置控件的轨迹图像。
您正在寻找与 UISlider
上的 minimumValueImage
和 maximumValueImage
相当的内容。不幸的是,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")
}