據我所知,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. Jquery滑塊控制音量
- 2. 自定義滑塊控件
- 3. 如何使用音量滑塊控制音軌?
- 4. 我可以控制滑塊值programaticaly?
- 5. jQuery UI滑塊控制YouTube音量
- 6. 爲什麼我的音量滑塊不能控制音樂?
- 7. 我可以使用__init__.py來定義全局變量嗎?
- 8. 音量滑塊
- 9. 自定義滑塊
- 10. BX滑塊自定義控件
- 11. 我想在我的應用中製作自定義滑塊
- 12. 可可音頻音量滑塊與綁定
- 13. 我可以使用自定義攝像頭覆蓋自定義相機控制按鈕的標題嗎?
- 14. 不使用QML的自定義滑塊?
- 15. 我可以在自定義的uitableviewcell中使用滑動刪除功能嗎?
- 16. 可以使用網絡異常來控制流量嗎?
- 17. 如何使ui滑塊來控制jQuery.fx.interval?
- 18. 我可以定義自己的面板控制使用asp.net用戶控件
- 19. 音量滑塊控件 - JQuery/Javascript
- 20. 我可以可靠地使用winform中的WPF自定義控件嗎?
- 21. 我可以使用PHP使用自定義協議嗎?
- 22. 使用UIWebView,我可以使用自定義字體嗎?
- 23. 我們可以使用自定義卡支付使用ApplePay嗎?
- 24. 使用自定義皮膚的雙滑塊控件
- 25. 我可以使用模塊池來決定負載平衡嗎?
- 26. 我可以使用isset()來控制mysql查詢的執行嗎
- 27. 我們可以使用OBD-II端口來控制汽車嗎?
- 28. 我可以通過添加模塊來定製Jackson ObjectMapper嗎?
- 29. 我可以在模塊定義函數中使用Rspec Expect嗎?
- 30. 我可以從odoo中的自定義模塊繼承嗎?
這是否通過了蘋果的審查? – 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