自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS開(kāi)發(fā)者須知 :WatchKit開(kāi)發(fā)技巧

移動(dòng)開(kāi)發(fā) iOS
從一月中旬以來(lái)我全身心投入到 WhereNotes App 的Apple Watch部分的工作中。我也有幸被邀請(qǐng)到在Cupertino 的Apple Watch 實(shí)驗(yàn)室。在過(guò)去的三個(gè)半月中,我搜集了很多技巧,并在這篇文章中涵蓋了它們中的大部分。我希望這些技巧能夠?qū)δ愕腁pple Watch開(kāi)發(fā)有所幫助。

[[141038]]

從一月中旬以來(lái)我全身心投入到 WhereNotes App 的Apple Watch部分的工作中。我也有幸被邀請(qǐng)到在Cupertino 的Apple Watch 實(shí)驗(yàn)室。在過(guò)去的三個(gè)半月中,我搜集了很多技巧,并在這篇文章中涵蓋了它們中的大部分。我希望這些技巧能夠?qū)δ愕腁pple Watch開(kāi)發(fā)有所幫助。

也許你對(duì)于這些如applicationWillEnterForeground:和applicationDidEnterBackground:方法非常熟悉。它們?cè)谂c之相對(duì)應(yīng)的通知(UIApplicationWillEnterForegroundNotification和UIApplicationDidEnterBackgroundNotification)前被調(diào)用。與之相等價(jià)(鮮有人知)的WatchKit NSExtensionContext通知如下:

NSExtensionHostWillEnterForegroundNotification?

NSExtensionHostDidEnterBackgroundNotification?

NSExtensionHostWillResignActiveNotification?

NSExtensionHostDidBecomeActiveNotification

我與大多數(shù)蘋果開(kāi)發(fā)者社區(qū)中的成員都有這樣的經(jīng)驗(yàn),用一個(gè)在充電器上的Watch測(cè)試會(huì)獲得更好更可靠的調(diào)試經(jīng)驗(yàn)。

在iOS上可以隨時(shí)更新界面元素,但是在WatchKit上,只能更新當(dāng)前激活的、可視的視圖控制器中的元素。直到didDeactivate方法被調(diào)用時(shí),更新才能被安全的執(zhí)行。(注意你不能在此方法中更新界面元素)這意味著如果你打算更新一個(gè)當(dāng)前隱藏的視圖控制器(例如你正在查看最頂部的模態(tài)控制器),你會(huì)需要執(zhí)行當(dāng)前控制器的willActivate方法,這個(gè)方法會(huì)在模態(tài)控制器消失的時(shí)候被調(diào)用。

除包含在你的Watch app bundle中的assets之外,每個(gè)app 只允許5MB的高速圖片緩存,通過(guò)extension使用 WKInterfaceDevice 中的方法引入和管理圖片緩存。從extension發(fā)送圖片到watch端需要消耗時(shí)間和電池電量,所以需要重用圖片(即使只是用一次),這都是值得緩存的。如果使用 addCachedImage:name: 發(fā)送一張圖片,那么這張圖片會(huì)自動(dòng)的被以PNG格式編碼,并發(fā)送到緩存中。不論P(yáng)NG是否是最佳的格式(但這是最安全的格式)。如果你的圖片能以JPG的格式呈現(xiàn),我強(qiáng)烈地推薦使用addCachedImageWithData:name: 來(lái)取代上述方法。以JPG格式編碼圖片和試用圖片質(zhì)量設(shè)置,不僅圖片將會(huì)更快速地傳輸,同時(shí)也會(huì)擁有更多的緩存空間用于儲(chǔ)存更多的圖片。

依據(jù)之前的建議,你可以在后臺(tái)進(jìn)程緩存圖片(依據(jù)一個(gè)在開(kāi)發(fā)者社區(qū)中的蘋果雇員所述)。我在我的Watch app中,使用提前緩存圖片這項(xiàng)技術(shù)。

如果你使用前邊提及到的圖片緩存,這里沒(méi)有內(nèi)置方法決定刪除使用過(guò)最舊的圖片。如果你的app管理了許多圖片,你會(huì)想要封裝關(guān)于緩存的manager。

為了測(cè)試Apple Watch上的通知,在Apple Watch配對(duì)的app的通用中設(shè)置關(guān)閉手腕檢測(cè)。

想要強(qiáng)制退出app,按住旁邊的按鈕,一段時(shí)間后再次按住它(注意強(qiáng)制退出你的app不會(huì)強(qiáng)制退出你的extension)。

在willActivate中最小化處理的工作,以減少加載等待時(shí)間。

考慮用戶在使用iPhone app之前打開(kāi)你的Watch app以及設(shè)計(jì)的一致性。App審核會(huì)發(fā)現(xiàn)這些情況。

記住你的Watch app 是以extension的方式運(yùn)行。你的Watch app的內(nèi)存限制要比iPhone app要更為嚴(yán)格。如果處理大量的圖片,在iPhone app上完成此項(xiàng)工作會(huì)更好(使用openParentApplication:reply:)。還得注意模擬器不會(huì)執(zhí)行這些內(nèi)存限制,所以必須在真實(shí)地設(shè)備上進(jìn)行測(cè)試。

為了發(fā)現(xiàn)你的app是否與Watch匹配,為Watch app共享的NSUserDefaults(使用 shared app group)設(shè)置BOOL值,你的iPhone app能夠獲取它。

為了同步在iPhone與Watch之間的數(shù)據(jù),你可以調(diào)用你的iPhone app執(zhí)行所有的數(shù)據(jù)更新(使用 openParentApplication:reply:),或使用 Darwin notifications 在extension和iPhone app之間發(fā)送事件。Darwin notifications不支持?jǐn)?shù)據(jù)裝載,所以如果你想通過(guò)通知傳輸數(shù)據(jù),可以查看非常有用的 MMWormhole 工程。

你除了使用timer更新和刷新界面元素,還可以使用KVO,如果你的數(shù)據(jù)源支持。這就是我在我的Watch app中所使用的方法。使用這種方法,界面元素只會(huì)在它們改變的時(shí)候被更新,同時(shí)降低通訊消耗和節(jié)省電池電量。

如果你需要跟蹤控制器界面,在 awakeWithContext: 中考慮給self傳輸引用建立關(guān)系。我已經(jīng)在我的app中通過(guò)我的 JBInterfaceController subclass 大量地使用這種模式。使用類似這類的技術(shù)讓你如使用代理模式一樣去工作。同時(shí),更多以類似UIViewController方式考慮你的controller。

WatchKit extension是前臺(tái)的extension,所以如果你需要獲得 Core Location 的授權(quán)允許,你只需要在授權(quán)需要時(shí)請(qǐng)求。

除非你的場(chǎng)景需要,必須謹(jǐn)慎考慮你是否需要“在線更新”,即在Watch和iPhone之間立即同步。用戶通常不會(huì)同時(shí)使用兩個(gè)設(shè)備,所以在下一次Watch或iPhone app激活時(shí)簡(jiǎn)單地更新數(shù)據(jù)就能避免大量的同步邏輯。不幸的是看著watch與iPhone的模擬器的屏幕緊鄰彼此,就很有可能去建立復(fù)雜的同步邏輯。也許我做了,但我沒(méi)有告訴你。

當(dāng)你不能用程序創(chuàng)建和控制視圖控制器時(shí),你能明智地了解你是如何隱藏和顯示視圖元素。這會(huì)成為一個(gè)通用地WatchKit實(shí)踐,例如,建立一個(gè)全頁(yè)的label,如果有一則重要的消息需要展示時(shí)它可以被顯示?;蛘撸绻阌袃蓚€(gè)你需要編程選擇的布局,可以包含它們到最上層的組,并在需要的時(shí)候讓其隱藏和顯示。

記住每個(gè)屏幕的觸摸和界面更新需要Watch和iPhone之間來(lái)回的通訊。

WatchKit界面元素是只寫的(它們通常也有setter方法),這需要手動(dòng)跟蹤你已經(jīng)設(shè)置后你不想再次設(shè)置的值。WatchKit嘗試在每次run loop合并值以及只發(fā)送最后的值,但你也能參與其中跟蹤你自己的值。

然而這里沒(méi)有內(nèi)建的活動(dòng)指示控件,當(dāng)進(jìn)行一項(xiàng)長(zhǎng)時(shí)間的處理時(shí)(如圖片傳輸或下載),你可以顯示一系列的動(dòng)態(tài)圖片。更新于5/3/2015:我剛在GitHub發(fā)布了JBWatchActivityIndicator 工程,它使得創(chuàng)建活動(dòng)指示圖片序列更加容易。它也包含了一些蘋果風(fēng)格的預(yù)先渲染的序列。

確認(rèn)下載和查看Apple Watch Design Resouces。除了有用的顏色和尺寸的推薦外,也包含了用于市場(chǎng)截圖的高質(zhì)量圖片。正當(dāng)我說(shuō)著這個(gè)話題時(shí),你提交的app截圖不包含bezel 圖片是沒(méi)有價(jià)值的。

許多開(kāi)發(fā)者對(duì)于模擬器上圖片展示正確,但在真實(shí)的watch上卻不一致的情況表示沮喪。事實(shí)上這是許多App被拒絕的原因。這個(gè)問(wèn)題的出現(xiàn)與文件命名和文件丟失有關(guān)。最安全的解決辦法是在Watch app中(不是extension)的assets library 中包含所有的圖片。這就是我在我的Watch app中所作的。我推薦你也使用同樣的方法。

雖然能從Watch加載你的iPhone app到前臺(tái)是一個(gè)非常常見(jiàn)的需求,但通過(guò)編程無(wú)法實(shí)現(xiàn)(即使有方法可以在模擬器上運(yùn)行),考慮用 Handoff 取代。

如果你需要在兩個(gè)視圖控制器間傳遞信息,但你不能通過(guò) awakeWithContext: 完成,考慮使用發(fā)送 NSNotifications。在extension中它們運(yùn)行良好。否則遠(yuǎn)程指定克隆我的JBInterfaceController subclass,并使用代理模式。

本地通知要求設(shè)置 soundName 屬性以生成觸覺(jué)反饋和鈴聲。

模擬器是好的開(kāi)始,但在真實(shí)硬件設(shè)備上測(cè)試你的app才是關(guān)鍵。

責(zé)任編輯:chenqingxiang 來(lái)源: Mike Swanson的博客
相關(guān)推薦

2015-04-14 09:33:17

WatchKitAPP

2014-04-04 17:13:13

iOSAndroid開(kāi)發(fā)技巧

2015-10-21 13:42:54

iOS開(kāi)發(fā)watch OS2

2015-07-20 09:26:09

iOS數(shù)據(jù)庫(kù)存儲(chǔ)

2015-06-15 10:57:34

開(kāi)發(fā)者2015移動(dòng)開(kāi)發(fā)

2015-09-01 09:31:00

Android M權(quán)限

2015-08-11 11:01:22

設(shè)計(jì)原則開(kāi)發(fā)者

2014-08-08 10:12:44

IRC

2017-01-19 21:45:27

iOS開(kāi)發(fā)者賬號(hào)

2019-11-14 14:44:32

開(kāi)發(fā)者工具

2014-05-04 10:58:19

開(kāi)發(fā)者廣告

2022-01-18 23:26:45

開(kāi)發(fā)

2015-07-09 10:36:40

iOS

2014-05-27 13:48:34

開(kāi)發(fā)者付費(fèi)

2014-09-01 09:53:50

Android框架

2011-03-30 16:55:29

亞馬遜KindleiOS

2019-05-30 08:00:00

2012-02-13 10:21:11

Skala PreviiOS應(yīng)用

2012-06-13 01:23:30

開(kāi)發(fā)者程序員

2011-12-19 20:05:36

iOS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)