【问题标题】:how to set the maximum and minimum image of MPVolumeView correctly如何正确设置 MPVolumeView 的最大和最小图像
【发布时间】: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)

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

【问题讨论】:

    标签: ios swift ios8 uislider mpvolumeview


    【解决方案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")
      

      【讨论】:

        猜你喜欢
        • 2017-03-16
        • 2012-01-29
        • 1970-01-01
        • 2018-01-19
        • 2016-03-30
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多