多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > iPhone/iOS開啟個人熱點的縱向適配小結

iPhone/iOS開啟個人熱點的縱向適配小結

來源:程序員人生   發布時間:2015-03-04 08:47:02 閱讀次數:12571次

1.iPhone創建個人熱門

iPhone/iOS雙環上網,即iPhone通過創建個人熱門(Personal Hotspot)實現同享上網,支持便攜式Wi-Fi熱門、藍牙同享網絡和USB同享網絡。

1.若iPhone已開啟了WiFi(和藍牙),則直接創建成功。

其他裝備可通過WiFi(或藍牙)搜索熱門名稱并連接實現同享上網。

需要說明的是:蘋果的藍牙協議是封閉的,只支持蘋果的裝備(iPhone/iPad/iMac)間連接,沒法與Android等裝備的藍牙進行發現配對!

2.若iPhone只開啟了藍牙,未開啟WiFi,則提示


若選擇【打開"Wi-Fi"】(Turn on Wi-Fi),則其他裝備可通過WiFi搜索熱門名稱并連接實現同享上網。

若選擇【僅藍牙和USB】(Bluetooth and USB Only),則其他裝備可通過藍牙或USB連接到該iPhone搜索熱門名稱并連接實現同享上網。

3.若iPhone未開啟藍牙和WiFi,則提示


若選擇【打開"Wi-Fi"和藍牙】(Turn on Wi-Fi and Bluetooth),則其他裝備可通過藍牙/WiFi搜索熱門名稱并連接實現同享上網。

若選擇【僅USB】(USB Only),則其他裝備可通過USB連接到該iPhone搜索熱門名稱并連接實現同享上網。


2.iMac通過USB連接iPhone同享個人熱門上網

當iPhone新建了個人熱門,iMac(Mac OS X)通過USB連接上iPhone時,將自動連接上iPhone的個人熱門(the first 1 Connection)。


在Mac/Xcode上調試iPhone真機時,若只想調試iPhone/Android連接個人熱門的情形(以便測試有熱門欄和無熱門欄的情況),則可在Network Preferences中刪除iPhone USB接口(interface),避免Mac自動通過USB連接上iPhone熱門對調試造成干擾。


3.iPhone/iOS個人熱門狀態欄

iPhone作為個人熱門且有連接時,系統狀態欄下面會多1行熱門連接提示欄"Personal Hotspot: * Connection",縱向會下壓20pt;當所有連接都斷開時,熱門欄消失,縱向高度恢復正常。

1.系統狀態欄

APP_STATUSBAR_HEIGHT=[UIApplication sharedApplication].statusBarFrame.size.height,包括熱門欄(如有)高度,標準高度為20pt,當有個人熱門連接時,高度為40pt

// iOS系統版本

#define SYSTEM_VERSION    [[[UIDevice currentDevice] systemVersion] doubleValue]

// 標準系統狀態欄高度

#define SYS_STATUSBAR_HEIGHT                        20
// 熱門欄高度
#define HOTSPOT_STATUSBAR_HEIGHT            20
// 導航欄(UINavigationController.UINavigationBar)高度
#define NAVIGATIONBAR_HEIGHT                44
// 工具欄(UINavigationController.UIToolbar)高度
#define TOOLBAR_HEIGHT                              44
// 標簽欄(UITabBarController.UITabBar)高度
#define TABBAR_HEIGHT                              44
// APP_STATUSBAR_HEIGHT=SYS_STATUSBAR_HEIGHT+[HOTSPOT_STATUSBAR_HEIGHT]
#define APP_STATUSBAR_HEIGHT                (CGRectGetHeight([UIApplication sharedApplication].statusBarFrame))
// 根據APP_STATUSBAR_HEIGHT判斷是不是存在熱門欄
#define IS_HOTSPOT_CONNECTED                (APP_STATUSBAR_HEIGHT==(SYS_STATUSBAR_HEIGHT+HOTSPOT_STATUSBAR_HEIGHT)?YES:NO)
// 無熱門欄時,標準系統狀態欄高度+導航欄高度
#define NORMAL_STATUS_AND_NAV_BAR_HEIGHT    (SYS_STATUSBAR_HEIGHT+NAVIGATIONBAR_HEIGHT)
// 實時系統狀態欄高度+導航欄高度,如有熱門欄,其高度包括在APP_STATUSBAR_HEIGHT中。
#define STATUS_AND_NAV_BAR_HEIGHT                    (APP_STATUSBAR_HEIGHT+NAVIGATIONBAR_HEIGHT)

2.UIViewController.view.bounds.height

  • SYSTEM_VERSION < 7.0,UIViewController.view.bounds.height包括導航欄高度,不包括系統狀態欄高度,也不包括熱門欄(如果有)。
  • SYSTEM_VERSION  7.0,UIViewController.view.bounds.height包括標準系統狀態欄高度和導航欄高度,但不包括熱門欄(如果有)。
也即當有熱門欄時,UIViewController.view.bounds.height都自動扣除熱門欄的高度,iOS<7.0不包括標準系統狀態欄,iOS≥7.0包括標準系統狀態欄。
由于iOS7把全部屏幕高度(包括狀態欄,不包括熱門欄)都作為了視圖控制器的有效高度,因此從iOS6升級到iOS7時,會出現視圖整體上移了1個狀態欄的高度(20pt),并和上層的狀態欄交疊在1起。
解決方法:設置extendedLayoutIncludesOpaqueBars屬性為NO,設置edgesForExtendedLayout為UIRectEdgeNone。

3.UIViewController適應熱門欄示例代碼

// MyViewController接口繼承自UIViewController
@interface MyViewController : UIViewController

// MyViewController* myViewController入棧
MyViewController* myViewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:myViewController animated:YES];

- (id)init

{

    // ...


    // 初始非全屏
    _bFullScreen = NO;
    // 進入該UIViewController之前的狀態
    _lastStatusBarStyle = [[UIApplication sharedApplication] statusBarStyle];

    _lastBarTranslucent = self.navigationController.navigationBar.translucent;


    // ...

}


// 排版時,注意logical coordinate space和device coordinate space的區分,注意frame和bounds的區分!

- (void)loadView

{

    // ...


    // 計算Custom Content View的Rect
    if (!_supportFullScreen)
    {
        CGFloat contentSatrtY = 0;
        
        if (IS_HOTSPOT_CONNECTED) { // iPhone4(s)-iOS6/iOS7屏幕坐標系下:hostView.frame={{0, 40}, {320, 440}}/{{0, 20}, {320, 460}}
            contentSatrtY = STATUS_AND_NAV_BAR_HEIGHT; // 84
            if (SYSTEM_VERSION >= 7.0) { // 如果設置了edgesForExtendedLayout=UIRectEdgeNone
                contentSatrtY -= HOTSPOT_STATUSBAR_HEIGHT;// 64(有熱門欄時,會自動下移20)
            }
        } else { // iPhone4(s)-iOS6/iOS7屏幕坐標系下:hostView.frame={{0, 20}, {320, 460}}/{{0, 0}, {320, 480}}
            contentSatrtY = NORMAL_STATUS_AND_NAV_BAR_HEIGHT; // 64
        }
        
        // contentSatrtY基于UIViewController.view所在的屏幕坐標系進行排版
        contentRect = CGRectMake(0, contentSatrtY, hostView.width, SCREEN_HEIGHT-STATUS_AND_NAV_BAR_HEIGHT-TOOLBAR_HEIGHT);
    }
    else // 針對iOS6/7分別配置了wantsFullScreenLayout=YES/edgesForExtendedLayout=UIRectEdgeAll,全屏隱藏狀態欄(包括熱門欄)、導航欄和工具欄以后高度為SCREEN_HEIGHT
    {
        contentRect = CGRectMake(0, 0, hostView.width, hostView.height);
    }


    // ...

}


- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    

    // ...


    if (_bFullScreen)
    {
        if (SYSTEM_VERSION >= 7.0)
        {
            self.extendedLayoutIncludesOpaqueBars = YES;
            self.edgesForExtendedLayout = UIRectEdgeAll;
        }
        else
        {
            self.wantsFullScreenLayout = YES;
            self.navigationController.navigationBar.translucent = YES; // iOS 6下保證導航欄透明
        }
    }
    else
    {
        [[UIApplication sharedApplication] setStatusBarStyle:_lastStatusBarStyle];
        if (SYSTEM_VERSION >= 7.0)
        {
            // 設置后:有個人熱門連接時,UIViewController.view自動下移20;無個人熱門連接時,UIViewController.view自動上移20
            self.extendedLayoutIncludesOpaqueBars = NO;
            self.edgesForExtendedLayout = UIRectEdgeNone;
        }
        else
        {
            self.wantsFullScreenLayout = NO;
            self.navigationController.navigationBar.translucent = _lastBarTranslucent;
        }

    }


    // ...

}

// 手動點擊內容區域實現全屏
- (void)setFullScreen:(BOOL)bFull

{

    _bFullScreen = bFull;

    
    // 全屏(非全屏)隱藏(顯示)系統狀態欄
    [[UIApplication sharedApplication] setStatusBarHidden:bFullScreen];
    // 全屏(非全屏)隱藏(顯示)頂部導航欄
    [self.navigationController setNavigationBarHidden:bFullScreen animated:YES];
    // 全屏(非全屏)隱藏(顯示)底部工具欄

    [self.navigationController setToolbarHidden:bFullScreen animated:YES];


    // ...

}


#pragma mark UIApplicationWillChangeStatusBarFrameNotification
// 如有必要,需監聽系統狀態欄變更通知:
UIApplicationWillChangeStatusBarFrameNotification

- (void)handleUIApplicationWillChangeStatusBarFrameNotification:(NSNotification*)notification
{
    CGRect newStatusBarFrame = [(NSValue*)[notification.userInfo objectForKey:UIApplicationStatusBarFrameUserInfoKey] CGRectValue];

    // 根據系統狀態欄高判斷熱門欄的變動
    BOOL bPersonalHotspotConnected = (CGRectGetHeight(newStatusBarFrame)==(SYS_STATUSBAR_HEIGHT+HOTSPOT_STATUSBAR_HEIGHT)?YES:NO);

    CGPoint newCenter = CGPointZero;
    CGFloat OffsetY = bPersonalHotspotConnected?+HOTSPOT_STATUSBAR_HEIGHT:-HOTSPOT_STATUSBAR_HEIGHT;
    if (SYSTEM_VERSION >= 7.0) { // 即便設置了extendedLayoutIncludesOpaqueBars=NO/edgesForExtendedLayout=UIRectEdgeNone,對沒有自動調劑的部份View做必要的手動調劑
        newCenter = self.someSubView.center;
        newCenter.y += OffsetY;
        self.someSubView.center = newCenter;
    } else { // Custom Content對應的view整體調劑
        newCenter = self.contentView.center;
        newCenter.y += OffsetY;
        self.contentView.center = newCenter; // contentView為Custom Content對應的view
    }
}

@end


參考

《iOS7兼容之前版本》

《iOS7適配》《iOS7 UI適配》

《iOS7遇到的1些問題及解決方法》

iOS7用代碼解決視圖控制器的View整體上移問題

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 黑人高h| 亚洲爱爱久久精品 | 羞羞网站在线免费观看 | 久久国产精品久久久久久久久久 | 免费一级欧美片在线观免看 | 久久精品国产精品亚洲毛片 | 欧美wwwxxxx| 精品国产影院 | 欧美free video | 日韩午夜网站 | 精品久久一区二区三区 | 一级女人毛片 | 国产伦精品一区二区三区在线观看 | 亚洲精品日本 | 日本美女一级黄色片 | 久久国产精品久久国产精品 | 色久影院| 欧美激情精品久久久久久久九九九 | 国产精品不卡高清在线观看 | 亚洲国产成人精品不卡青青草原 | 多人伦精品一区二区三区视频 | 92精品国产自产在线观看48页 | 国产精品亚洲二区在线 | 男女爽爽无遮挡午夜视频在线观看 | 黄页网址免费观看18网站 | 国产高清在线精品一区在线 | 精品免费久久久久久久 | 最近新中文字幕大全高清视频 | 一级毛片一级毛片一级毛片aaav | 日本xxx在线观看 | 毛片传媒| 自拍偷拍第 | 一级片欧美 | 国产福利不卡视频在免费播放 | 中文字幕在线看视频一区二区三区 | 欧美a网| 国产成人精品日本亚洲专 | 欧美色图天堂网 | 国产α片 | 宇都宫紫苑99av | 久久久久久久99精品免费 |