OK, 到目前為止,我們產生了一個平面,但我們如何在這平上設置虛擬物件呢?
我們可以藉由觸碰手機螢幕,在這個平面上產生新的node, 我們這裏稱為focus node。那focus node 的位置是怎麼被算出來的呢? 這裡是用一種Ray casting 的方式產生的,也就是一種虛擬射線的概念 , 當手指觸碰的螢幕時,虛擬場景(scence)中就會產生一個虛擬射線朝平面(plane nodes)射去, 兩者的焦點(Intersection)將會被放置一個fucus node
開始製作, 首先我們先產生一個focus point
var focusPoint:CGPoint!
focusPoint = CGPoint(x: view.center.x, y: view.center.y + view.center.y * 0.20)
這個點將會佔據螢幕高的 20%,並且設定在螢幕中心點的下方
再來偵測旋轉
@objc func orientationChanged() {
focusPoint = CGPoint(x: view.center.x, y: view.center.y + view.center.y * 0.20)
}
這裡用於在裝置方向改變時, focusPoint 的重新設定, 這裡設定相同的參數
接下來我們在通知中心添加一個觀察者
NotificationCenter.default.addObserver(self,
selector: #selector(ViewController.orientationChanged),
name: UIDevice.orientationDidChangeNotification,
object: nil
)
如此ㄧ來,就可以在裝置方向改變時, 改變focus 的位置