私はジェスチャシステムを使用してアプリを開発しています。基本的にiPhoneを左に回すとアプリが機能し、iPhoneを右に回すと他の機能、他のジェスチャで機能します。
私はそれでどのように働くのか分かりません、私はグーグルで検索を試みていますが動作しません、結果はタッチジェスチャーであり、モーションジェスチャーではありません。
誰かが私を助けるためのチュートリアルを持っていますか?
Swift3 ios10:
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder() // To get shake gesture
}
// We are willing to become first responder to get shake motion
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
// Enable detection of shake motion
override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
if motion == .motionShake {
print("Why are you shaking me?")
}
}
実装が非常に簡単:
1)iOSにレスポンダーチェーンの最初のビューコントローラーを知らせます。
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder()
}
override func canBecomeFirstResponder() -> Bool {
return true
}
2)イベントを何らかの方法で処理します。
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
if(event.subtype == UIEventSubtype.MotionShake) {
print("You shook me, now what")
}
}
これはIOS 12-参照 Apple Docs に更新されました。becomeFirstResponder()メソッドを追加する必要はなくなりました。
必要なのは、motionEnded関数をコードに追加することだけです。
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?)
{
// code here
}
Swift 5
次のメソッドをViewControllerに追加して、コードを実行するだけです
override func becomeFirstResponder() -> Bool {
return true
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?){
if motion == .motionShake
{
print("Shake Gesture Detected")
//show some alert here
}
}
Speedy99のSwift回答はObjective Cバージョンにあります
- (void)viewDidLoad {
[super viewDidLoad];
[self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder{
return true;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
if(event.subtype == UIEventSubtypeMotionShake){
NSLog(@"Why are you shaking me?");
}
}
Swift 5
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder()
}
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
if motion == .motionShake {
print("shake")
}
}
}
Swift Docs:- https://developer.Apple.com/documentation/uikit/uiresponder 。
モーションイベントを検出するためにSwiftは3つの方法を提供しています:-
func motionBegan()->動きが始まったことをレシーバに伝えます
func motionEnded()->モーションイベントが終了したことをレシーバーに通知します
たとえば、シェイクジェスチャーの後に画像を更新する場合
class ViewController: UIViewController {
override func motionEnded(_ motion: UIEvent.EventSubtype, with event:
UIEvent?)
{
updateImage()
}
UpdateImage(){
// Implementation
}
}