最近小萌的項目有投屏的需求,開始使用的是保利威的SDK,但是保利威的SDK不管iOS或者Android都是隻支持樂播投屏,但是我們項目的需求是AirPlay投屏
在我查找很多資料的過程中發現AVRoutePickerView和MPVolumeView都是支持投屏,但是AVRoutePickerView支持iOS11以上的系統,iOS11一下的系統只能用MPVolumeView來做投屏了。
AVRoutePickerView 和 MPVolumeView 的區別:
1、AVRoutePickerView支持iOS11以上
2、MPVolumeView支持iOS11以下
3、AVRoutePickerView無論有沒有投屏設備都會顯示圖標
4、MPVolumeView在附近無投屏設備的情況下是不會顯示圖標的
小萌充分體驗了優酷、愛奇藝、騰訊、芒果等有投屏功能的app,發現他們的投屏功能也是基於這兩個控件做的,在網上雖然說了各種它們的使用方法,但是都是講了最基本的用法
但是在具體項目中,我們想要的絕對不是這樣的圖標,我們需要更換圖標,這件小事讓我花費了不少的時間
主要代碼:
- (AVRoutePickerView *)castView API_AVAILABLE(ios(11.0)){
if(!_castView){
_castView = [[AVRoutePickerView alloc]init];
for (UIView *view in _castView.subviews) {
if ([view isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)view;
[button removeFromSuperview];
}
}
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(12, 12, 20, 20)];
imageView.image = ZFPlayer_Image(@"cast");
[_castView addSubview:imageView];
_castView.delegate = self;
}
return _castView;
}
既然這是一個可點擊的事件,那麼它的底層一定有UIControll這樣的事件來控制,查看它的子視圖,不難發現它的底層是有button的,把它刪掉也就把系統默認的圖標刪掉了,AVRoutePickerView是繼承UIView的,所有它有UIView的特性,自己定製即可,不會影響AVRoutePickerView的UIControll點擊事件的,仍然會呼出投屏菜單
圖標也更換成我們想要的了, MPVolumeView也是同理
完畢