據我所知,MPVolumeView可以添加到我的應用程序來改變音量。但現在我想用自定義滑塊控制音量。 也許如果MPVolume是uislider的一個子類,我自己可以適合它,的確,它是uiview的一個子類。 尋求意見,實現我的想法,非常感謝。我可以使用自定義滑塊來控制音量嗎?
回答
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];
}
}
,可以做我想做的,但我真的不知道,如果它可以通過蘋果的檢查
Hummm,你可以製作自己的滑塊,但它不會控制你想要的播放器的音量。您將不得不使用CoreAudio和CoreMedia等低級框架。
爲什麼不子類MPVolumeView?我從來沒有嘗試繼承MPVolumeView ,但您可以通過添加一些類別來訪問@protected的子類和@private類的東西。您可能需要查看MPVolumeView的標題以查看是否有可以自定義的UISlider(或其他)。
更新:(2010/07/21)
我明白了。讓我問你一件事。爲什麼需要將UIProgressView添加到VolumeView?一般來說,你會將它添加到播放器播放,但它的音量正確嗎?音量不會像流式傳輸音頻或視頻那樣加載?
其次,我剛看到MPVolumeView的標題。它有一個私人的,也隱藏類名爲MPVolumeViewInternal * _internal; 當你有這些類,如果非常難以定製而不被拒絕(當提交你的應用程序到AppStore時) 你可以創建一個類別並訪問_internal var,但是爲了使用_internal,你將不得不使用它的頭部,並且這意味着使用不允許的私有頭文件和框架。
或者您可以看看Objective-C runtime Reference中的函數,然後嘗試諸如drawnonward之類的建議來查找要修改的對象的UISlider。 使用Obj-C運行時功能是大多數技巧或易於破解的功能;)
如果您走MPVolumeView的視圖層次結構並碰巧找到UISlider,則可以隨時對其進行自定義。
for (view in theVolumeView.subviews) {
if ([view isKindOfClass:[UISlider class]]) { ... }
}
注意,還會有其他的意見,並有可能不是一個UISlider,所以不作任何假設。您可能想要遞歸地遍歷層次結構。
哦,在MPVolumeView中沒有任何類的uislider成員,但有3個子視圖,我想查找它們是什麼~~ – ben 2010-07-19 05:39:13
您的意思是kindOfClass :. – 2010-07-19 19:20:47
@tc謝謝,我總是混合起來。 – drawnonward 2010-07-20 03:54:13
做一個UIView在Interface Builder對MP框架 包括在MediaPlayer的頭 鏈接您的頭文件與包含您剛製作的UIView的XIB相對應 將您剛剛創建的視圖的類更改爲MPVolumeView
它在模擬器上不起作用,但它在設備上起作用。
另一種選擇是使用自定義滑蓋MPMusicPlayerController
:
MPMusicPlayerController *controller = [MPMusicPlayerController applicationMusicPlayer];
controller.volume = 0.5; // value in [0,1]
這裏是一個自定義的音量滑塊的全部代碼。它已經過測試並可用於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];
你可以在頂部或更容易修改後的頭文件聲明圖像名稱
- 1. 使用滑塊控制主音量? - Xcode
- 2. AVPlayer音量滑塊控制
- 3. Jquery滑塊控制音量
- 4. MPMoviePlayerController自定義音量滑塊問題
- 5. 自定義滑塊控件
- 6. 我可以控制滑塊值programaticaly?
- 7. 如何使用音量滑塊控制音軌?
- 8. jQuery UI滑塊控制YouTube音量
- 9. Java Sound可以用來控制系統音量嗎?
- 10. 爲什麼我的音量滑塊不能控制音樂?
- 11. WPF - 自定義設計音量控制
- 12. jQuery UI滑塊控制器可以替換其他圖像嗎? (可以定製?)
- 13. 我可以使用__init__.py來定義全局變量嗎?
- 14. 音量控制 - 使用AVFoundation,MPMovieController http straming文件的UI滑塊
- 15. 我可以在NSArray上使用自定義類方法來返回常量嗎?
- 16. 音量滑塊
- 17. 自定義滑塊
- 18. 我想在我的應用中製作自定義滑塊
- 19. 自定義滑塊控件上的UIAccessibility
- 20. 自定義滑塊控件與wxPython的
- 21. BX滑塊自定義控件
- 22. 可可音頻音量滑塊與綁定
- 23. 我可以使用自定義攝像頭覆蓋自定義相機控制按鈕的標題嗎?
- 24. 我可以在指令中使用模塊級控制器嗎?
- 25. Bx滑塊多滑塊自定義控件
- 26. 我可以使用滑動事件打開Oracle MAF自定義跳板嗎?
- 27. 我可以在自定義的uitableviewcell中使用滑動刪除功能嗎?
- 28. 有人可以幫我自動播放我的滑塊嗎?
- 29. 不使用QML的自定義滑塊?
- 30. MFMessageComposeViewController:我可以用自定義動畫來呈現嗎?
這是否通過了蘋果的審查? – Moshe 2011-02-04 21:00:07
它已通過審查,現在在appstore! – ben 2011-02-14 05:37:08
而不是比較類的描述字符串,我會使用'[view isKindOfClass:[UISlider class]]'代替。看起來更清潔,加上MPVolumeSlider是一個UISlider子類,這樣你的二進制文件中就沒有私有類名。 – DarkDust 2012-04-10 12:51:34