2016-11-27 10 views
4

UIViewControllerUIButtonのインスタンスがあり、これらのボタンのいずれかが押し下げられているときにいくつかのアクションを実行したいここで正確な用語を知っていないかもしれません。UIButtonの3Dタッチでアクションを実行する最良の方法

したがって、UIButtonに圧力がかかっているときに、振動による触覚フィードバックを与え、ボタンのイメージソースを変更して他のものをしたいと思います。その後、圧力が解除されたら、ボタンのイメージソースを通常の状態に戻して、もっとやりたいことをします。

これを行う最も簡単な方法は何ですか?

私は自分のカスタムをUIButtonのように作成するか、3Dタッチの "押した"と "解放する"ために上書きできるメソッドがありますか?

これまでのカスタムUIButtonコードです。試行錯誤して、最大の力を決定するべきか?また、各ボタンの画像のソースをできるだけ簡単に変更するにはどうしたらいいですか?

import AudioToolbox 
import UIKit 

class customButton : UIButton { 
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     for touch in touches { 
      print("% Touch pressure: \(touch.force/touch.maximumPossibleForce)"); 
      if touch.force > valueThatIMustFindOut { 
       AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate)) 
       // change image source 
       // call external function 
      } 
     } 
    } 

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     print("Touches End") 
     // restore image source 
     // call external function 
    } 
} 

Xcodeのグラフィカルインターフェイスを使用してできるだけ多くのユーザーインターフェイスを作成したいと考えています。だから私はコードからUIを作成しないようにしたいと思います。

力touch用として

答えて

2

- あなたはそれが最初に利用できるかどうかを検出する必要があります。

例えば中
func is3dTouchAvailable(traitCollection: UITraitCollection) -> Bool { 
    return traitCollection.forceTouchCapability == UIForceTouchCapability.available 
} 

if(is3dTouchAvailable(traitCollection: self.view!.traitCollection)) { 
    //... 
} 

、その後、それは

func touchMoved(touch: UITouch, toPoint pos: CGPoint) { 
    let location = touch.location(in: self) 
    let node = self.atPoint(location) 

    //... 
    if is3dTouchEnabled { 
     bubble.setPressure(pressurePercent: touch.force/touch.maximumPossibleForce) 
    } else { 
     // ... 
    } 
} 

touch.forcetouch.maximumPossibleForceとして利用できるようになりますtouchesMovedは、ここでは、コードサンプルと、より詳細な例です: http://www.mikitamanko.com/blog/2017/02/01/swift-how-to-use-3d-touch-introduction/

それは、このような「力に反応してもよいでしょうtaptic /触覚フィードバック付きタッチ」、ユーザがタッチを体験します:

お勧めします
let generator = UIImpactFeedbackGenerator(style: .heavy) 
generator.prepare() 

generator.impactOccurred() 

詳細については、この投稿を参照してください: http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

関連する問題