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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

2回答

1236閲覧

UITapGesturerecognizerでロングタップが機能しない

hodoru3sei

総合スコア284

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2019/02/02 08:26

詳細

UIButtonにUITapGesturerecognizeをつけて、通常のタップをされたらラベルをプラス1にして、ロングタップのままだったら連続で数値が上がるような機能を作りたいと思っています。

コード

該当文々のソースコードは下記のようになります。

Swift

1@IBOutlet weak var addTempoButton: UIButton! { 2 didSet { 3 let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressAdded(_:))) 4 addTempoButton.addGestureRecognizer(longPress) 5 } 6 } 7var timer:Timer? 8 9@objc func longPressAdded(_ sender: UILongPressGestureRecognizer) { 10 11 if sender.state == .began{ 12 print("lpngadd") 13 timer = Timer.scheduledTimer(withTimeInterval: 0.05, repeats: true){(_) in 14 self.stepValue = self.stepValue + 1 15 self.tempoLabel.text = String(Int(self.stepValue)) 16 } 17 } 18 if sender.state == .ended{ 19 //タイマーを破棄する 20 timer?.invalidate() 21 } 22 } 23@IBAction func addTempo(_ sender: Any) { 24 stepValue += 1 25 tempoLabel.text = String(Int(stepValue)) 26 } 27 28

###問題点
ButtonをタップするとaddTempo()は呼ばれてラベルの数値が変化するのですが、ロングタップしていてもlongPressAdded()が呼ばれず、処理が走らない状況です。
調べてみたのですが何が問題なのかわからなかったため質問させていただきました。

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

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

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

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

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

guest

回答2

0

自己解決

outletの接続先が間違っていました。
didSetでも問題なく動きました。

投稿2019/02/03 09:30

hodoru3sei

総合スコア284

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

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

0

@IBOutletdidSetの使い方が間違っています。

こちらの記事を参考に、以下のポイントに注意して修正してみてください。処理が走ると思います。
https://i-app-tec.com/ios/uigesturerecognizer.html

  • addTempoButtonのOutlet接続の仕方を変更

Swift

1// didSetつけたりしない 2@IBOutlet weak var addTempoButton: UIButton!
  • didSetの中に書いている2行をviewDidLoad()の中に移動

Swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 // この中に2行を移動 4}
  • UIGestureRecognizerDelegateを追加

Swift

1class ViewController: UIViewController ,UIGestureRecognizerDelegate { // 追加 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 longPress.delegate = self // 追加 7 } 8}

投稿2019/02/02 12:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hodoru3sei

2019/02/03 09:20 編集

試してみたのですが、@objcのメソッドが呼ばれませんでした。 @IBOutletとdidSetの使い方は何が何がダメなのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問