首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定制MPVolumeView?

如何定制MPVolumeView?
EN

Stack Overflow用户
提问于 2010-09-28 14:08:43
回答 5查看 9.4K关注 0票数 19

我尝试过许多方法来实现常规的UISlider并控制设备卷,但是这些都是Native函数,导致了许多无法跟踪的bug。

我试过MPVolumeView --它的工作原理就像魅力一样,甚至在你关闭应用程序之后,它也能控制设备的音量,就像iPod应用程序一样。

我的问题是,是否存在使用特定颜色和图像自定义MPVolumeView,就像UISlider一样

注意:我想要一个合法的方法,而不需要使用私有的、无文档的API。

更新

正如@Alexsander回答的那样,由于子视图隐藏在MPVolumeView中,所以我不得不遍历子视图,获取UISlider并自定义它,下面是代码。

代码语言:javascript
复制
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];
 }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-28 14:17:21

您可以尝试循环遍历它的子视图并查找UISlider子类吗?

票数 10
EN

Stack Overflow用户

发布于 2013-05-01 10:03:47

由于iOS 5.0,您可以在UISlider上使用UIAppearance,即使是MPVolumeView的一部分。

在你的代码库中的任何地方:

代码语言:javascript
复制
[[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实现的其他一些类的列表

票数 8
EN

Stack Overflow用户

发布于 2013-05-08 15:44:55

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

代码语言:javascript
复制
– setMaximumVolumeSliderImage:forState:
– setMinimumVolumeSliderImage:forState:
– setVolumeThumbImage:forState:

它们与香草UISlider的方法名称略有不同。

这就避免了你不得不循环通过视图,并有可能会有一些突破,在未来苹果公司改变的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3813625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档