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

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

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

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

Q&A

解決済

2回答

2023閲覧

キーボード作成中です。キーリピートをしたいんですかが、キーが押されたままの判定の仕方をしりたい

Nicola

総合スコア21

Swift

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

0グッド

0クリップ

投稿2015/07/05 01:54

編集2015/07/06 08:29

前提としてキーボードを作成するため、下記の通りボタン(キー)を作成しています。
そしてキー(画面に表示したボタン)を押すとbtnDown49、離すとbtnUp49が走ります。
どうしたら、リピートをできるでしょうか?

•••

self.button49 = UIButton.buttonWithType(.System) as! UIButton self.button49 = UIButton(frame: CGRectMake(myWidth * CGFloat(9), myHeight * 3 + CGFloat(4), myWidth - CGFloat(2) ,myHeight)) //ボタンのサイズと位置 self.button49.setTitleColor(UIColor.blackColor(), forState: .Normal) self.button49.backgroundColor = UIColor.whiteColor() self.button49.layer.cornerRadius = 5 //角丸 self.button49.layer.borderWidth = 1 //枠線 self.button49.addTarget(self, action: "btnUp49:", forControlEvents:.TouchUpInside) //ボタンが離された時の処理関数をセット self.button49.addTarget(self, action: "btnDown49:", forControlEvents:.TouchDown) //ボタンを押した時の処理関数をセット

•••

} func btnDown49(sender: UIButton){ fDub = false //ダブルクリック判定用フラグ self.button49.backgroundColor = UIColor.blackColor() var proxy = textDocumentProxy as! UITextDocumentProxy proxy.deleteBackward() //バックスペース出力 SiftCange() //ボタンの色判定し変更 } func btnUp49(sender: UIButton){ self.button49.backgroundColor = UIColor.whiteColor() //ボタンの色変更 }

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

NSTimerを活用してください。

lang

1var timer: NSTimer? = nil 2 3func btnDown49(sender: UIButton) { 4 println("down") 5 btnRepeat49(NSTimer(timeInterval: 0, target: self, selector: "", userInfo: 0.5, repeats: false)) 6} 7 8func btnUp49(sender: UIButton) { 9 println("up") 10 self.timer?.invalidate() 11 self.timer = nil 12} 13 14func btnRepeat49(timer: NSTimer) { 15 println("repeat \(timer.userInfo)") 16 self.timer = NSTimer.scheduledTimerWithTimeInterval(timer.userInfo as! Double, target: self, selector: "btnRepeat49:", userInfo: 0.25, repeats: false) 17}

投稿2015/07/06 12:15

Stripe

総合スコア2183

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

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

Nicola

2015/07/06 13:04 編集

ありかとうございます。 惜しい所まで行くんですが、UITextDocumentProxyの引き継ぎが出来ず、バックスペースの処理を出力出来ません。 内部処理的にはリピートしてるんですが・・・ もしかして、UITextDocumentProxyの宣言の場所など、使い方が根本的に間違っているんてしょうか? 初心者なもので・・・教えて頂ければ幸いです。
Stripe

2015/07/06 12:55

proxyの引き継ぎって何の話ですか?
Nicola

2015/07/06 13:08 編集

すみません。略しすぎました。 UITextDocumentProxyで文字を吐き出しています。 この処理がbtnRepeat49内ではエラーになってしまいます。 よろしくお願いいたします。
Nicola

2015/07/06 14:02 編集

現在のコードです。 シュミレーターでbtnDown49でリピート処理に入ると、フリーズします。 よろしくお願いいたします。 消去•••
Stripe

2015/07/06 13:30

NSTimerから呼ばれるbtnRepeat49()メソッドに第二引数はありません。 NSTimerのuserInfoを活用してください。
Nicola

2015/07/06 23:25 編集

userInfoを使ってみましたが、コンパイルは通ってシュミレーターは走りますが、リピート処理でフリーズします。 使い方が間違っているのでしょうか? 初心者なのにハードルが高いのでしょうか? SWIFTのNSTimerなどのSDKの使い方の乗っているいい本がありますでしょうか? よろしくお願いいたします。 •••間違ったコードの消去
Stripe

2015/07/06 14:42

もともとuserInfoで渡していた遅延時間値を削除しないでください。 userInfoは「任意のオブジェクト」なので、NSDictionalyなどを使って複数の値を渡すようにしてください。 それ以前に、proxyを引数で渡す必要あるんですか? btnRepeat49()メソッドからもtextDocumentProxyが参照できるのでは?
Nicola

2015/07/06 23:27

>>btnRepeat49()メソッドからもtextDocumentProxyが参照できるのでは? 最初エラーでできなかったのですが、もう一度試したところコンパイルも正常で、動作しました。 ありがとうございました。
guest

0

Swiftは知らないのではずしてるかも?
※ハードウエアキーボードでのキーリピート時
前提:
→キーが押された、キーが放された、はイベントとして処理される。
→リピートするのは別スレッド?
処理:
・キーが押されたらチャタリング防止のため一定時間(100~200msec程度)まって、キーバッファにキーコードを設定
・待っている間にキーが離されたらキーバッファには入れない
・リピートをする処理は、キーバッファにデータがあればそれを出力(画面をロックする必要があるかもしれない)
・キーが放されたらキーバッファをクリアする
・・・こんな感じかなぁ

投稿2015/07/06 08:18

cateye

総合スコア6851

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

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

Nicola

2015/07/06 08:28

質問の仕方が悪かったですね。前提として、ソフトウェアキーボードを作成したいのです。 よろしくお願いします。
cateye

2015/07/06 08:37

いえ、こちらこそ一言足りなかったようですmm キーの処理としてはどこからイベントが飛んでくるか?とキーの値の違いだけであまり変わらないと思います。キーが押されてからリピートを開始する時間の調整は必要でしょうが、処理にあまり変わりはないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問