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

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

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

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

830閲覧

Swift UISwipeGestureRecognizerでフリック後にラベルを消したい

yuki84

総合スコア23

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2019/07/17 07:33

編集2019/07/17 07:40

開発環境 Xcode10.2.1 / Swift5 / iOS12

フリック入力ができるボタンを作成したいと考え、こちらを参考にUISwipeGestureRecognizerを用いて、以下に示すようなコードでボタンを作成しました。

やりたいこととして、現状では左にフリックするとラベルが出るようになっているのですが、その後指を離した時にラベルを消す方法を教えていただきたいです。

iPhoneの日本語キーボードのフリック入力のような動作をイメージしています。
ご教授よろしくお願いいたします。

Swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 var key = UIButton() 6 var leftLabel:UILabel? 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 key = UIButton(frame: CGRect(x: 200, y: 400, width: 80 , height: 50)) 12 key.backgroundColor = UIColor.gray 13 view.addSubview(key) 14 15 let flickLeft = UISwipeGestureRecognizer() 16 flickLeft.direction = UISwipeGestureRecognizer.Direction.left 17 flickLeft.addTarget(self, action: #selector(ViewController.leftEntry)) 18 key.addGestureRecognizer(flickLeft) 19 20 } 21 22 // 左にフリックした時 23 @objc func leftEntry(sender:UISwipeGestureRecognizer){ 24 print("左") 25 leftLabel = UILabel() 26 leftLabel!.frame = CGRect(x: 0, y: 0, width: key.frame.width, height: key.frame.height) 27 leftLabel!.layer.position = CGPoint(x:key.layer.position.x - key.frame.width, y:key.layer.position.y) 28 leftLabel!.backgroundColor = UIColor(red:0.7,green:0.7,blue:0.7,alpha:1.0) 29 leftLabel!.text = "左" 30 leftLabel!.font = UIFont.systemFont(ofSize: 22) 31 leftLabel!.textAlignment = NSTextAlignment.center 32 self.view.addSubview(leftLabel!) 33 } 34 35} 36

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

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

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

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

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

fuzzball

2019/07/17 07:34

やりたいことしか書かれていないようですが、質問は何でしょうか?
yuki84

2019/07/17 07:38

申し訳ないです。フリック後、指を離した時にラベルを消す方法を教えていただきたいです。
fuzzball

2019/07/17 07:42

それのどの部分が分からないのでしょうか? ・「指を離した」の判定 ・ラベルを消す方法 など
yuki84

2019/07/17 07:45

「指を離した」の判定方法がわからないです。
guest

回答2

0

UILongPressGestureRecognizerを使って指が離れたことを検出すると良いと思います。
minimumPressDurationは短めに取るとタップに近い動きも捉えられます。

Swift

1let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress(_:))) 2 longPressGesture.cancelsTouchesInView = true 3 longPressGesture.minimumPressDuration = 0.5 4 longPressGesture.delegate = self // UIGestureRecognizerDelegateをセット 5 view.addGestureRecognizer(longPressGesture) // Viewに追加.

Swift

1@objc private func longPress(_ sender: UILongPressGestureRecognizer) { 2 if sender.state == .began { 3 logger.info("LongPress began") 4 } else if sender.state == .ended { 5 logger.info("LongPress ended") 6 } 7 }

こんな感じでしょうか。

投稿2019/07/17 12:30

編集2019/07/17 12:32
k2moons

総合スコア184

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

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

yuki84

2019/07/18 02:16

回答ありがとうございます。勉強になりました。
guest

0

ベストアンサー

「指を離した」の判定はUIPanGestureRecognizerで出来ると思います。

複数のUIGestureRecognizerの併用は gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:) について調べて下さい。

投稿2019/07/17 08:30

fuzzball

総合スコア16731

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

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

yuki84

2019/07/18 02:15

ありがとうございます。できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問