iOS 開發 進階:通過AirServer使用AirPlay鏡像並實現多螢幕顯示控制

來源:互聯網
上載者:User

AirPlay是iOS中一個很酷的功能,通過Wi-Fi串連支援AirPlay的裝置,然後使用鏡像功能就能在其他裝置顯示內容,播放聲音。有很多大型的遊戲都支援AirPlay,這樣比如串連電視時,那麼iPhone就完全變成了遊戲手柄,而電視顯示遊戲畫面。由於大部分的iOS使用者都沒有使用Apple TV,因此多螢幕的應用比較少使用。但這並不能否定AirPlay的強大功能。本文將介紹使用AirServer軟體在Mac或Windows上實現AirPlay的功能,進而介紹通過編程實現多螢幕顯示的方法。


1、使用AirServer軟體實現AirPlay

AirServer是一個極其強大的軟體,能夠通過軟體的方式完全實現Apple TV的功能。大家可以到Google之,有免費的試用版。就是其表徵圖:


在安裝好AirServer後,開啟,可以看到標誌在Mac的工具列上:


OK,接下來就是將iPhone與Mac串連起來,可以使用iPhone上的熱點,用Mac串連,或者在Mac上建立一個熱點,讓iPhone串連Wifi。

串連好之後,雙擊iPhoneHome鍵,拉到音量大小介面,如下:



點擊右邊的AirPlay按鍵,彈出設定介面:


選擇第二個,也就是Mac:

開啟鏡像,完成。這樣沒有錯誤的情況下,在Mac上就實現了AirPlay的鏡像,如:


接下來你可以播放視頻,音樂來測試一下效果。如果有點卡的話,可以考慮重啟一下wifi,這樣傳輸速度會快一點。


2、編程實現多螢幕。

在可以使用AirPlay之後,我們要實現多螢幕,也就是在電腦上顯示的和iOS裝置上顯示的內容不一樣。

2.1 基本原理

擷取新的螢幕資訊--->建立一個新的Window--->將新的Window對應的Screen螢幕設定為新的螢幕--->設定新的螢幕的UI顯示

我們知道,一般情況下,我們在開發過程中只使用一個window(UIWindow),而且一般在AppDelegate檔案中建立,一般情況下我們甚至完全不用理會window。一樣的,screen(UIScreen)我們除了通過它來擷取一些螢幕資訊之外也不會做任何處理,比較螢幕也只有一塊。那麼現在要實現多螢幕就不一樣了。我們要建立新的window,擷取新的screen,並且將window和screen聯絡在一起,這樣要在這個window中顯示的內容就可以顯示在這個新的螢幕當中。


2.2 實現


STEP 1:檢查是否有多的螢幕存在,如果有,那麼直接設定。一般先在viewController中設定一個UIWindow和UIScreen的執行個體:

@property (nonatomic,strong) UIWindow *externalWindow;@property (nonatomic,strong) UIScreen *externalScreen;

然後,檢查:

- (void)checkForExistingScreenAndInitializeIfPresent{    if ([UIScreen screens].count > 1) {        self.externalScreen = [[UIScreen screens] objectAtIndex:1];        NSLog(@"external screen :%@",self.externalScreen);                    CGRect screenBounds = self.externalScreen.bounds;        self.externalWindow = [[UIWindow alloc] initWithFrame:screenBounds];        self.externalWindow.screen = self.externalScreen;                // Set the initial UI for the window for example        {            UILabel *screenLabel = [[UILabel alloc] initWithFrame:screenBounds];            screenLabel.text = @"Screen 2";            screenLabel.textAlignment = NSTextAlignmentCenter;            screenLabel.font = [UIFont systemFontOfSize:100];                        UIViewController *externalViewController = [[UIViewController alloc] init];            externalViewController.view.frame = screenBounds;            [externalViewController.view addSubview:screenLabel];            self.externalWindow.rootViewController = externalViewController;        }                        self.externalWindow.hidden = NO;    }}

在這裡通過screens Method來判斷是否螢幕數大於1,如果是意味著有別的螢幕串連到iOS裝置,這時擷取這個螢幕。

對於window初始化然後關鍵是要設定其Frame,一般就是設定成螢幕大小,全屏。然後將window的screen設定為外部螢幕。然後就可以進行window相關view,viewController的設定,上面的代碼只是一個小例子。最後設定window 的hidden為NO。


對於上面這種情況,主要是針對iOS在啟動應用之前就已經AirPlay了,那麼,如果是啟動應用後才要開啟AirPlay呢?

當然有辦法------notification


STEP 2:Notification檢查螢幕的串連情況。

UIScreen有兩個notification可以檢查螢幕的串連情況:

UIScreenDidConnectNotification

UIScreenDidDisconnectNotification

一旦螢幕串連上或斷開iOS裝置,就會發出上面的notification。這樣就簡單了,設定一下:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil];        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil];

然後進行相關的處理。

#pragma mark - Notifications Handler- (void)screenDidConnect:(NSNotification *)notification{    NSLog(@"connect");    self.externalScreen = notification.object;        // Handle the configuration below......}- (void)screenDidDisconnect:(NSNotification *)notification{    NSLog(@"disconnect");    if (self.externalWindow) {        self.externalWindow.hidden = YES;        self.externalScreen = nil;        self.externalWindow = nil;    }}

這樣差不多就搞定了。基本上在iOS開發中主要是view的編輯,因為在新的螢幕中解析度不一樣,要進行特定的設定。


【本文為原創文章,如需轉載,請註明出處!來自songrotek的Blog】



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.