新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > iOS 7: 隱藏的特性和解決之道

iOS 7: 隱藏的特性和解決之道

作者: 時間:2016-09-12 來源:網絡 收藏

分頁

UIWebView 使用了新的技巧來自動分頁帶paginationMode的網站。有一大堆與此功能相關的新屬性:

@property (nonatomic) UIWebPaginationMode paginationMode NS_AVAILABLE_IOS(7_0);

@property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode NS_AVAILABLE_IOS(7_0);

@property (nonatomic) CGFloat pageLength NS_AVAILABLE_IOS(7_0);

@property (nonatomic) CGFloat gapBetweenPages NS_AVAILABLE_IOS(7_0);

@property (nonatomic, readonly) NSUInteger pageCount NS_AVAILABLE_IOS(7_0);

現在而言,雖然這可能并非對于大多數網站都有用,但它肯定是生成簡單的電子書閱讀器或顯示文本的一種更好的方式。加點樂子的話,請嘗試將它設置為UIWebPaginationModeBottomToTop。

會飛的 Popovers

想知道為什么你的popovers瘋了一樣到處亂飛?在UIPopoverControllerDelegate協議中有一個新的代理方法使你能控制它:

(void)popoverController:(UIPopoverController *)popoverController

willRepositionPopoverToRect:(inout CGRect *)rect

inView:(inout UIView **)view

當popover錨點是指向一個UIBarButtonItem時,UIPopoverController會有一些動作,但如果你讓它在一個view或者rect中顯示,你可能就需要實現此方法并正常返回。一個花費了我相當長的時間來驗證的問題——如果你通過改變preferredContentSize來動態(tài)調整你的popovers,那么這個方法就特別要求得以實現。蘋果公司現在對改變popovers大小的請求更嚴格,如果沒有預留足夠的空間,popover將會到處移動。

鍵盤支持

蘋果公司不只為我們提供了全新的framework用于游戲控制器,它也給了我們這些鍵盤愛好者一些提示!你會發(fā)現新定義的公用鍵像 UIKeyInputEscape 或 UIKeyInputUpArrow,可以使用所有新的 UIKeyCommand 類截查。在 iOS7 之前,只能通過一些難以言表的手段來處理鍵盤命令,現在,就讓我們操起藍牙鍵盤試試看我們能用這個做什么!

開始之前,你需要對責任者鏈有個了解。你的 UIApplication 繼承自 UIResponder,UIView 和 UIViewController 也是如此。如果你處理過 UIMenuItem 并且沒有使用我的基于塊的包裝的話,那么你已經了解了這些。事件先被發(fā)送到最上層的響應者,然后一級級往下傳遞直到 UIApplication 。為了捕獲按鍵命令,你需要告訴系統(tǒng)你關心哪些鍵命令(而不是全捕獲)。為了完成這個,你需要重寫keyCommands這個新屬性:

(NSArray *)keyCommands

{

return @[[UIKeyCommand keyCommandWithInput:@f

modifierFlags:UIKeyModifierCommand

action:@selector(searchKeyPressed:)]];

}

- (void)searchKeyPressed:(UIKeyCommand *)keyCommand

{

// Respond to the event

}

現在可別太激動,需要注意的是,這個方法只在鍵盤可見時有效(比如有類似 UITextView 這樣的對象作為第一響應者時)。對于全局熱鍵,你仍然需要用上面的方法。除卻那些,這個路徑還是很優(yōu)雅的。不要覆蓋類似 cmd-V 系統(tǒng)的快捷鍵,它會被自動映射為粘貼功能。

還有一些新的預定義的響應行為如:

1

2- (void)increaseSize:(id)sender NS_AVAILABLE_IOS(7_0);

- (void)decreaseSize:(id)sender NS_AVAILABLE_IOS(7_0);

它們分別對應著 cmd+ 和 cmd- 命令,用來放大/縮小內容。

匹配鍵盤背景

蘋果公司終于公開了 UIInputView,其中提供了一種方式——使用UIInputViewStyleKeyboard來匹配鍵盤樣式。這使得你可以編寫自定義的鍵盤或者帶默認樣式的默認鍵盤擴展(工具條)。這個類以前就存在了,不過現在我們終于可以繞過私有API的方式來使用它了。

如果 UIInputView 是一個 inputView 或者 inputAccessoryView 的根視圖,它將只顯示一個背景,否則它將是透明的。遺憾的是,這并不能讓你實現一個未填充的分離態(tài)的鍵盤,但它仍然比用一個簡單的 UIToolbar 要好。我還沒看到蘋果在何處使用這個新API,貌似它只作為一個 UIToolbar 使用在 Safari 上。

了解你的網絡

雖然早在 iOS4 的時候,關于網絡信息的大部分已經在 CTTelephony 暴露了,但它通常只用于特定場景并非十分有用。iOS7 中,蘋果公司為其添加了一個方法,其中最有用的:currentRadioAccessTechnology。這個使你能知曉手機是處于較慢的GPRS還是高速的LTE或者介于其中。目前還沒有方法得到連接速度(當然手機本身也無法獲取這個),但是這足以用來優(yōu)化一個下載管理器,讓其在EDGE下不用嘗試同時去下載6張圖片了。

現在還沒有currentRadioAccessTechnology的相關文檔,因此存在一些不正規(guī)或者錯誤的用法。當你想要獲取當前網絡信號值,你應當注冊一個CTRadioAccessTechnologyDidChangeNotification通知而不應該去輪詢這個屬性。為了獲取這些通知,你需要使用CTTelephonyNetworkInfo的一個實例,注意不要在通知中創(chuàng)建 CTTelephonyNetworkInfo 的實例,否則會 crash。

在這個簡單的例子中,我在block中捕獲并持有了 telephonyInfo,大家可以忽略這個:

1

2

3

4

5

6

7

8

9CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];

NSLog(@Current Radio Access Technology: %@, telephonyInfo.currentRadioAccessTechnology);

[NSNotificationCenter.defaultCenter addObserverForName:CTRadioAccessTechnologyDidChangeNotification

object:nil

queue:nil

usingBlock:^(NSNotification *note)

{

NSLog(@New Radio Access Technology: %@, telephonyInfo.currentRadioAccessTechnology);



關鍵詞:

評論


相關推薦

技術專區(qū)

關閉