我尝试过许多方法来实现常规的UISlider并控制设备卷,但是这些都是Native函数,导致了许多无法跟踪的bug。
我试过MPVolumeView --它的工作原理就像魅力一样,甚至在你关闭应用程序之后,它也能控制设备的音量,就像iPod应用程序一样。
我的问题是,是否存在使用特定颜色和图像自定义MPVolumeView,就像UISlider一样
注意:我想要一个合法的方法,而不需要使用私有的、无文档的API。
更新
正如@Alexsander回答的那样,由于子视图隐藏在MPVolumeView中,所以我不得不遍历子视图,获取UISlider并自定义它,下面是代码。
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];
}发布于 2010-09-28 14:17:21
您可以尝试循环遍历它的子视图并查找UISlider子类吗?
发布于 2013-05-01 10:03:47
由于iOS 5.0,您可以在UISlider上使用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实现的其他一些类的列表
发布于 2013-05-08 15:44:55
现在有一些方法可以实现这一点,只需使用:
– setMaximumVolumeSliderImage:forState:
– setMinimumVolumeSliderImage:forState:
– setVolumeThumbImage:forState:它们与香草UISlider的方法名称略有不同。
这就避免了你不得不循环通过视图,并有可能会有一些突破,在未来苹果公司改变的事情。
https://stackoverflow.com/questions/3813625
复制相似问题