今天回家了悯搔,但總想寫點(diǎn)什么度過(guò)一下閑暇的時(shí)光照激。前晚看了蘋果發(fā)布會(huì),覺得沒什么稀奇铃拇,幸運(yùn)的是钞瀑,在Facebook上看到直播一個(gè)小型開發(fā)會(huì)議(Swift Meetup),談?wù)摰氖荊oogle VR-SDK 的開發(fā)锚贱。
大東對(duì) iOS-VR 的看法
水果目前并沒有開發(fā)支持VR的框架仔戈,而且像今年Oculus只支持三星產(chǎn)品,意味著它們開發(fā)的平臺(tái)iOS不能用呀拧廊。這不是很尷尬嗎监徘。
Oculus powers the Samsung Gear VR, the most widely distributed VR headset in the world. Supported by Samsung’s global distribution and marketing efforts, Gear VR is compatible with the tens of millions of Samsung GALAXY flagship smartphones, including S7, S7 edge, S6, S6 edge, S6 edge +, and Note 5.
水果的開發(fā)者文檔里面也沒有一個(gè)框架是直接用來(lái)做VR的,只能通過(guò)Core-Motion來(lái)達(dá)到那種效果吧碾。但是自己開發(fā)又有點(diǎn)麻煩凰盔,可敬的Google開發(fā)團(tuán)隊(duì)給iOS帶來(lái)Google-VRSDK,省去了很多麻煩倦春。
或許水果會(huì)趁人意料地發(fā)布一款吊炸的VR設(shè)備讓你恨不得割腎也想買户敬,或許只是開發(fā)一個(gè)框架來(lái)支持VR眼鏡。雖然我覺得兩者都會(huì)有??睁本,讓我們拭目以待尿庐。
<a name="fenced-code-block">Let's Get Started It.</a>
Google VRView
所謂的Google VRView指的是能夠看全視角的影片或相片,實(shí)現(xiàn)相對(duì)比較簡(jiǎn)單呢堰。目前國(guó)內(nèi)外也有很多類似的應(yīng)用支持這個(gè)功能抄瑟。
VR view allows you to embed 360 degree VR media into websites on desktop and mobile, and native apps on Android and iOS. This technology is designed to enable developers of traditional apps to enhance the apps with immersive content. For example, VR view makes it easy for a travel app to provide viewers with an underwater scuba diving tour as they plan a vacation or for a home builder to take prospective buyers on a virtual walkthrough before the home is built.
pod 'GVRSDK' //要用到cocoapods 講一個(gè)笑話:我是iOS開發(fā)者,我不知道cocoapods是什么.......
最好的學(xué)習(xí)方式還是看官方文檔枉疼。
看文檔發(fā)現(xiàn)皮假,Google VRView 的包含幾種類型:GVRCardboardView鞋拟,GVRWidgetView(其中包含了兩個(gè)子類GVRPanoramaView,GVRVideoView)
<a name="fenced-code-block">GVRCardboardView</a> Defines a view responsible for rendering graphics in VR mode
<a name="fenced-code-block">GVRWidgetView </a> Defines a base class for all widget views, that encapsulates common functionality
<a name="fenced-code-block">GVRPanoramaView </a> Defines a view that can load and display 360-degree panoramic photos
<a name="fenced-code-block">GGVRVideoView </a> Defines a player view that renders a 360 video using OpenGL
GVRCardboardView 是用來(lái)開發(fā)某些自定義3D場(chǎng)景的惹资,用到OpenGL贺纲,比較復(fù)雜,當(dāng)然褪测,SceneKit就可以結(jié)合它來(lái)進(jìn)行開發(fā)的猴誊。
本次介紹的是GVRPanoramaView和GVRVideoView,先探索它們的使用汰扭。
要實(shí)現(xiàn)一個(gè)全景照片的View稠肘,可以直接使用GVRPanoramaView 類。
先看看繼承關(guān)系:
GVRPanoramaView Inherits(繼承) GVRWidgetView Inherits(繼承) UIView
-
step1:直接在storyboard拖拽一個(gè)UIView并連接到Controller中
@IBOutlet weak var panoView: GVRPanoramaView!
panoView.enableFullscreenButton = true
panoView.enableCardboardButton = true
panoView.enableTouchTracking = true
panoView.load(UIImage(named: "你的全景照片"), of: .stereoOverUnder)
Property | 介紹 |
---|---|
<GVRWidgetViewDelegate>delegate | The delegate that is called when the widget view is loaded. |
enableFullscreenButton | 是否添加fullScreen 的按鈕 |
enableCardboardButton | 是否添加 cardboard 的按鈕 |
enableTouchTracking | 是否可以手勢(shì)拖動(dòng)圖片 |
就是圖片下方一欄的自定義功能
看文檔的時(shí)候發(fā)現(xiàn)還有一個(gè) displayMode
displayMode: Controls the current GVRWidgetDisplayMode of the widget view.
Changing the value of this property is similar to pressing one of the fullscreen, cardboard or back UI buttons.
這個(gè)功能告訴你可以自定義按鍵實(shí)現(xiàn)一個(gè)全屏幕或者VR屏幕的轉(zhuǎn)換萝毛。這也讓自己能夠自定義界面布局项阴。非常棒
接下來(lái)談?wù)凞elegate
panoView.delegate = self
extension VRViewController: GVRWidgetViewDelegate {
func widgetViewDidTap(widgetView: GVRWidgetView!) {
//Called when the user taps the widget view.
}
func widgetView(widgetView: GVRWidgetView!, didLoadContent content: AnyObject!) {
//Called when the widget view's display mode changes.
}
func widgetView(widgetView: GVRWidgetView!, didChangeDisplayMode displayMode: GVRWidgetDisplayMode) {
//Called when the content is successfully loaded.
}
func widgetView(widgetView: GVRWidgetView!, didFailToLoadContent content: AnyObject!, withErrorMessage errorMessage: String!) {
//Called when there is an error loading content in the widget view.
}
}
假設(shè)我們希望在全景照片下通過(guò)點(diǎn)擊屏幕然后切換下一個(gè)照片,這里就可以通過(guò)調(diào)用widgetViewDidTap
的方法來(lái)實(shí)現(xiàn)
func widgetViewDidTap(widgetView: GVRWidgetView!) {
//或許你可以放在一個(gè)數(shù)組里面笆包,進(jìn)行循環(huán)切換
panoView?.load(UIImage(named: "另一張照片"), of: GVRPanoramaImageType.mono)
}
這里环揽,GVRPanoramaImageType
是要看你的圖片格式,如果你的圖片是一張相片形式的庵佣,就是mono
歉胶,有的照片是同一張照片上下疊加形式的就是stereoOverUnder
.
前面提到 GVRWidgetDisplayMode
它含一下幾種類型
Type | 介紹 |
---|---|
.embedded | 就像上面示例圖一樣呈現(xiàn)在你自定義View中 |
.fullscreen | 全屏幕形式展示 |
.fullscreenVR | 有兩個(gè)顯示屏幕形式 |
假設(shè)一種情景是你在自己的自定義View中不想在點(diǎn)擊照片后切換圖片,這時(shí)候就可以用GVRWidgetDisplayMode來(lái)判斷.
當(dāng)然還有展示全景形式的Video巴粪,這個(gè)跟全景照片類似通今,就不展示了。
強(qiáng)烈推薦Ray的一篇文章Introduction to Google Cardboard for iOS肛根,里面對(duì)圖片和影片都有完整的介紹辫塌。也可以下載它們的Demo來(lái)試一試。