質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

受付中

長押しになる押し方をした場合に「touchesBegan」が遅い。

ios-develper
ios-develper

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0回答

0評価

0クリップ

6閲覧

投稿2018/03/01 07:32

編集2022/01/12 10:55

現在、swift言語を使って、鍵盤アプリを作成しようとしています。

鍵盤なので、
ボタンのようにタップされたかどうかではなく、
触っている状態であれば、音が鳴っている状態としたい為、
「touchesBegan」イベントハンドラを使って、触ったことを判定しています。
鍵盤自体のViewへの追加および、イベントハンドラを、
抜粋すると以下のようになっています。

Swift

//---------------------------------------------------------------------------- // 個別キーボード配置 //---------------------------------------------------------------------------- func setKey(viewKeyboadBase: UIView, fileNameForNormal: String, leadingMargin :CGFloat, width :CGFloat, height :CGFloat, tag :Int) { // イメージボタンの生成 let btn : UIImageView = UIImageView() // イメージの作成 let image :UIImage = UIImage(named: fileNameForNormal)! // イメージ設定 btn.image = image // Viewいっぱいに広げる。 btn.contentMode = .redraw // タグの設定 btn.tag = tag //UserInteractionを拾う。 btn.isUserInteractionEnabled = true // 追加 viewKeyboadBase.addSubview(btn) //---------------------------------------------------------------------------- // 制約を追加 //---------------------------------------------------------------------------- // AutoresizingMaskは、OFFにしておく。コードで追加する制約とコンフリクトしないようにする為 btn.translatesAutoresizingMaskIntoConstraints = false // 上からの距離 btn.topAnchor.constraint(equalTo: viewKeyboadBase.topAnchor, constant: 0.0).isActive = true // 左からの距離 btn.leadingAnchor.constraint(equalTo: viewKeyboadBase.leadingAnchor, constant: leadingMargin).isActive = true // 高さ btn.heightAnchor.constraint(equalToConstant: height).isActive = true // 横幅 btn.widthAnchor.constraint(equalToConstant: width).isActive = true } //---------------------------------------------------------------------------- // タッチを検知 //---------------------------------------------------------------------------- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { for touch: UITouch in touches { if let view = touch.view { let tag = view.tag // tagに応じた発音処理 } } }

通常のボタンにタップするように、鍵盤にさわった場合
(さわってすぐ離す場合)、
触ってからtouchesBeganが呼ばれるまでの時間は、全く気にならないレベルなのですが、
長押しになる押し方をした場合、
触ってから「touchesBegan」が反応するまでに0.5秒くらいかかることがあります。

(補足1)実機を用いた時に発生します。
(補足2)コードでは省略しましたが、鍵盤は、全部で61あります。
(補足3)発生頻度はマチマチで、法則性が掴めまていません。

長押しになる押し方をした場合も、
触った瞬間を素早く検知するやり方がありますでしょうか?
どなたかご教授願います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

fuzzball
fuzzball

2018/03/01 09:45

もし3DTouch対応機種でしたら、OFFにして試してもらえますか?
ios-develper
ios-develper

2018/03/01 10:01

3Dタッチをオフにして試してみましたが、状況変化なしです。
fuzzball
fuzzball

2018/03/01 10:15

touchesBeganが呼ばれたことをどうやって確認していますか?touchesBeganの先頭にprint文を追加して確認してもらえますか?
ios-develper
ios-develper

2018/03/01 11:27

// tagに応じた発音処理 のところで画像のすでにprint文は実行しています。
ios-develper
ios-develper

2018/03/01 11:28

すいません。日本語がおかしくなりました。
ios-develper
ios-develper

2018/03/01 11:29

// tagに応じた発音処理  のところで、 print文、画像の差し替え、発音処理などをやっています。
fuzzball
fuzzball

2018/03/01 12:57

そのprint文の表示されるタイミングで、遅れているかどうかを確認しているのでしょうか?
ios-develper
ios-develper

2018/03/01 23:14

はい。print文がデバッグログに表れるタイミングが明らかに遅れます。
fuzzball
fuzzball

2018/03/02 00:30 編集

「UIScrollView上にのっており」おそらくこれです。ScrollView の delaysContentTouches を false にしてみて下さい。
ios-develper
ios-develper

2018/03/02 01:46

内容が「回答」なので、「質問への追記・修正の依頼」ではなく「回答」でコメントいただけないでしょうか?
fuzzball
fuzzball

2018/03/02 01:51

実際に確認していないので回答としては書きません。解決できたのであれば自分で書いて下さい。
ios-develper
ios-develper

2018/03/02 03:22

分かりました。助言ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています