据我所知,MPVolumeView可以添加到我的应用程序以更改音量。但现在我想用自定义滑块控制音量。 如果MPVolume是uislider的子类,也许我可以自己适应它,实际上,它是uiview的子类。 请求建议实现我的想法,非常感谢。
答案 0 :(得分:4)
UIView *a=[[UIView alloc] init];
for (UIView *view in [volumeSlider subviews]) {
if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) {
a=view;
[(UISlider *)a setThumbImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[(UISlider *)a setMinimumTrackImage:[UIImage imageNamed:@"volume2.png"] forState:UIControlStateNormal];
[(UISlider *)a setMaximumTrackImage:[UIImage imageNamed:@"volume3.png"] forState:UIControlStateNormal];
}
}
可以做我想要的,但我真的不知道它是否可以通过苹果的检查
答案 1 :(得分:3)
如果您走过MPVolumeView的视图层次结构并碰巧找到UISlider,您可以随时自定义它。
for ( view in theVolumeView.subviews ) {
if ( [view isKindOfClass:[UISlider class]] ) { ... }
}
请注意,会有其他视图,可能没有UISlider,所以不要做任何假设。您可能希望以递归方式遍历层次结构。
答案 2 :(得分:2)
嗯,你可以制作自己的滑块,但它无法控制你想要的播放器的音量。您必须使用CoreAudio和CoreMedia等低级框架。
为什么不将MPVolumeView子类化?我从未尝试过子类化MPVolumeView 但是你可以通过添加一些类别来通过子类化和@private来访问@protected东西。您可能希望查看MPVolumeView的标题,以查看是否有可以自定义的UISlider(或其他内容)。
更新:(2010/07/21)
我明白了。让我问你一件事。为什么需要将UIProgressView添加到VolumeView?一般情况下,您会将其添加到播放器播放但是其音量对吗?音量或视频流加载不合适吗?
其次,我刚看到MPVolumeView的标题。它有一个名为MPVolumeViewInternal * _internal的私有隐藏类; 如果您有这类课程,如果很难自定义而不被拒绝(将应用程序提交到AppStore时) 您可以创建一个类别并访问_internal var,但为了使用_internal,您必须拥有其标题,这意味着使用不允许的私有标头和框架。
或者您可以查看Objective-C runtime Reference中的函数,并尝试像drawingonward建议的那样找到要修改的对象的UISlider。 使用Obj-C运行时函数是大多数技巧或易于破解的方法;)
答案 3 :(得分:1)
在“界面”构建器中创建UIView 链接MP框架 在头文件中包含MediaPlayer头,该头文件对应于包含您刚才创建的UIView的XIB 将刚刚创建的视图的类更改为MPVolumeView
它无法在模拟器上运行,但它可以在设备上运行。
答案 4 :(得分:0)
另一个选项是使用MPMusicPlayerController
自定义滑块:
MPMusicPlayerController *controller = [MPMusicPlayerController applicationMusicPlayer];
controller.volume = 0.5; // value in [0,1]
答案 5 :(得分:0)
这是自定义音量滑块的完整代码。它经过测试并适用于xcode 4.6.1
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:volumeSlider.bounds] autorelease];
UIView *a=[[UIView alloc] init];
for (UIView *view in [volumeView subviews]) {
if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) {
a=view;
[(UISlider *)a setThumbImage:[UIImage imageNamed:@"slider_thumb.png"] forState:UIControlStateNormal];
[(UISlider *)a setMinimumTrackImage:[UIImage imageNamed:@"slider_progress.png"] forState:UIControlStateNormal];
[(UISlider *)a setMaximumTrackImage:[UIImage imageNamed:@"slider_bg.png"] forState:UIControlStateNormal];
}
}
[volumeSlider addSubview:volumeView];
[volumeView sizeToFit];
您可以在顶部或头文件中声明图像名称,以便以后修改