代码之家  ›  专栏  ›  技术社区  ›  mohdajami

如何自定义MPVolumeView?

  •  19
  • mohdajami  · 技术社区  · 16 年前

    我尝试了很多方法来实现一个常规的 UISlider 并控制设备的体积,但这都是本机的C功能,这导致了许多无法追踪的错误。

    MPVolumeView 它的工作原理很有魅力,甚至可以在你关闭应用程序后控制设备音量,就像iPod应用程序一样。

    我的问题是,有没有定制 MPVolumeView版本 有特定的颜色和图像,就像 滑块控件 ?


    根据@Alexsander Akers的回答,因为子视图隐藏在 MPVolumeView版本 自定义,这是代码。

    IBOutlet UISlider *volumeSlider;   //defined in <class.h> and connected to a UISlider in Interface Builder
    
    -(void) viewDidLoad {
         ....
         [self setCustomSlider];
         ....
    }
    
    -(void) setCustomSlider{
         MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:[volumeSlider frame]] autorelease];
         NSArray *tempArray = volumeView.subviews;
    
         for (id current in tempArray){
               if ([current isKindOfClass:[UISlider class]]){
                        UISlider *tempSlider = (UISlider *) current;
                        UIImage *img = [UIImage imageNamed:@"trackImage.png"];
                        img = [img stretchableImageWithLeftCapWidth:5.0 topCapHeight:0];
                        [tempSlider setMinimumTrackImage:img forState:UIControlStateNormal];
    
                        [tempSlider setThumbImage:[UIImage imageNamed:@"thumbImage.png"] forState:UIControlStateNormal];
    
               } 
        }
        [volumeSlider removeFromSuperview];
        [self.view addSubview:volumeView];
     }
    
    5 回复  |  直到 16 年前
        1
  •  10
  •   Alexsander Akers    16 年前

    您可以尝试在其子视图中循环并查找UISlider子类吗?

        2
  •  8
  •   cescofry    13 年前

    iOS 5.0版 UIAppearance 在 MPVolumeView版本 .

    代码库中的任意位置:

    [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_full.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal];
    [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_empty.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal];
    [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setThumbImage:[UIImage imageNamed:@"nowplaying_player_nob.png"] forState:UIControlStateNormal];
    

    以下是可以使用UIAppearance实现的一些其他类的列表: https://gist.github.com/mattt/5135521

        3
  •  3
  •   ekinnear    13 年前

    现在有一些方法可以实现这一点,只需使用:

    – setMaximumVolumeSliderImage:forState:
    – setMinimumVolumeSliderImage:forState:
    – setVolumeThumbImage:forState:
    

    UISlider .

    这就避免了你不得不在视图中循环,并且在苹果改变事物的时候,可能会有一些东西在未来中断。

        4
  •  1
  •   Adam    8 年前

    迅速回答:

    func customSlider() {
            let temp = mpVolView.subviews
            for current in temp {
                if current.isKind(of: UISlider.self) {
                    let tempSlider = current as! UISlider
                    tempSlider.minimumTrackTintColor = .yellow
                    tempSlider.maximumTrackTintColor = .blue
                }
            }
        }
    

    结果:

    enter image description here

        5
  •  -1
  •   Community Mohan Dere    9 年前

    尝试使用 Notification ,但看起来 Apple is denying them.


    [编辑]

    Try this