2015-09-11 19 views
8

如何使用模擬器使用tvOS來接觸觸摸?我們需要知道觸摸位置。 UIPress - 沒有它!如何使用tvOS接收觸摸?

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event { 
    // Never called 
} 

-(void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event { 
    // Works fine! 
} 

回答

1

我認爲它應該是pressBegan而不是triggeredBegan。

(void)pressesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event 
+0

你的權利!印刷機開始,坎塞爾,結束 - 一切正常。我們需要一個觸摸式 - 在觸摸屏上有X和Y的位置! – user2545883

+0

@ user2545883如果它解決了您的問題,請將其標記爲正確答案,以便具有相同問題的其他人知道這是解決方案 – Chris

0

請記住,tvOS沒有像觸摸屏幕那樣的「觸摸」的概念。

處理「水龍頭」的官方方式是使用UITapGestureRecognizer。當物品處於焦點狀態時,用戶點擊/點擊遙控器即可。

這裏是我正在做它用UICollectionView工作:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MovieCell", forIndexPath: indexPath) as? MovieCell { 

     let movie = movies[indexPath.row] 
     cell.configureCell(movie) 

     if cell.gestureRecognizers?.count == nil { 
      let tap = UITapGestureRecognizer(target: self, action: "tapped:") 
      tap.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)] 
      cell.addGestureRecognizer(tap) 
     } 

     return cell 

    } else { 
     return MovieCell() 
    } 
} 

func tapped(gesture: UITapGestureRecognizer) { 

    if let cell = gesture.view as? MovieCell { 
     //Load the next view controller and pass in the movie 
     print("Tap detected...") 
    } 
} 

你可以抓住的自來水從獲取傳遞在處理函數的UITapGestureRecognizer位置。

還看到蘋果電視上看到這個教程: https://www.youtube.com/watch?v=XmLdEcq-QNI

+0

在這種情況下,您不需要輕觸手勢識別器。正常的UICollectionView didSelect ...委託方法應該像在iOS上一樣工作。 – lemnar

+0

lemnar - 他們沒有。花了好幾個小時試圖讓我工作,直到我閱讀文檔。焦點狀態,然後是控制器輕擊沒有indexPath的上下文,因此您必須使用輕擊手勢。 – Spentak

+0

如何區分點擊次數? – David

10

印刷機都與物理按鍵,如菜單按鈕。當你開始按住這個按鈕時,按下按鈕,當你停止按下按鈕時,按下按鈕。沒有任何與印刷機相關的屏幕相對位置。

tvOS中的觸摸類似於iOS中的觸摸,但有一個重要的區別:它們是「間接」觸摸,即手指位置與屏幕位置之間沒有物理關係。

當觸摸開始時,它將被傳送到聚焦視圖,並且無論手指在觸摸表面上的絕對位置如何,觸摸都將被視爲在該視圖的中心開始。當觸摸移動時,其屏幕相對位置將相應更新。

我不知道有任何API可以讓你確定手指在觸摸表面上的絕對位置。

在你的情況下,讓你的響應者聚焦視圖應該使它接收觸摸事件。

+0

https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/DetectingButtonPressesandGestures.html#//apple_ref/doc/uid/TP40015241-CH16-SW1 – Mark

+0

其實你可以得到絕對值將GCMicroGamepad的reportsAbsoluteDpadValues設置爲YES。請參閱:https://developer.apple.com/library/tvos/documentation/GameController/Reference/GCMicroGamepad_Ref/index.html#//apple_ref/occ/instp/GCMicroGamepad/reportsAbsoluteDpadValues –

+0

這是爲遊戲控制器,而不是據我所知,遙控器。 –

0

一個簡單的方法來做到這一點:

var tapGestureRecognizer: UITapGestureRecognizer! 

override func didMoveToView(view: SKView) { 

    tapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: Selector("tapped:")) 
    self.view?.addGestureRecognizer(tapGestureRecognizer) 

} 

func tapped(sender: UITapGestureRecognizer) { 

    // do something 

} 

看看我的資料庫:https://github.com/fredericdnddev/tvOS-UITapGestureRecognizer/blob/master/tvOS%20Game/GameScene.swift

+0

問題標記爲目標c,這就是user2545883正在尋找的內容。發佈迅速的解決方案對他沒有幫助,也沒有其他人喜歡我自己尋找客觀的c例子。 – seaders

+1

該解決方案的問題在於,這是PRESS而不是TAP。問題是獲得TAP的座標!新聞沒有座標。從TVOS中獲取座標的方法之一是使用UIPanGestureRecognizer。 –