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

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

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

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

Swift

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

Q&A

0回答

408閲覧

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

ios-develper

総合スコア9

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/03/01 07:32

編集2018/03/01 09:19

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

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

Swift

1 //---------------------------------------------------------------------------- 2 // 個別キーボード配置 3 //---------------------------------------------------------------------------- 4 func setKey(viewKeyboadBase: UIView, 5 fileNameForNormal: String, 6 leadingMargin :CGFloat, 7 width :CGFloat, 8 height :CGFloat, 9 tag :Int) { 10 11 12 // イメージボタンの生成 13 let btn : UIImageView = UIImageView() 14 // イメージの作成 15 let image :UIImage = UIImage(named: fileNameForNormal)! 16 // イメージ設定 17 btn.image = image 18 // Viewいっぱいに広げる。 19 btn.contentMode = .redraw 20 21 // タグの設定 22 btn.tag = tag 23 24 //UserInteractionを拾う。 25 btn.isUserInteractionEnabled = true 26 27 // 追加 28 viewKeyboadBase.addSubview(btn) 29 30 //---------------------------------------------------------------------------- 31 // 制約を追加 32 //---------------------------------------------------------------------------- 33 // AutoresizingMaskは、OFFにしておく。コードで追加する制約とコンフリクトしないようにする為 34 btn.translatesAutoresizingMaskIntoConstraints = false 35 // 上からの距離 36 btn.topAnchor.constraint(equalTo: viewKeyboadBase.topAnchor, constant: 0.0).isActive = true 37 // 左からの距離 38 btn.leadingAnchor.constraint(equalTo: viewKeyboadBase.leadingAnchor, constant: leadingMargin).isActive = true 39 // 高さ 40 btn.heightAnchor.constraint(equalToConstant: height).isActive = true 41 // 横幅 42 btn.widthAnchor.constraint(equalToConstant: width).isActive = true 43 44 } 45 //---------------------------------------------------------------------------- 46 // タッチを検知 47 //---------------------------------------------------------------------------- 48 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 49 50 for touch: UITouch in touches { 51 if let view = touch.view { 52 let tag = view.tag 53 54 // tagに応じた発音処理 55 56 } 57 } 58 59 } 60

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

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

UIScrollView上にのっており、
長押しがscroll操作と区別がつかず、
その分、「touchesBegan」が反応するまでに時間がかかるのでしょうか?

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/03/01 09:45

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

2018/03/01 10:01

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

2018/03/01 10:15

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

2018/03/01 11:27

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

2018/03/01 11:28

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

2018/03/01 11:29

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

2018/03/01 12:57

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

2018/03/01 23:14

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

2018/03/02 00:30 編集

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

2018/03/02 01:46

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

2018/03/02 01:51

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

2018/03/02 03:22

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問