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

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

ただいまの
回答率

90.49%

  • Swift

    7448questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 942

Nicola

score 15

前提としてキーボードを作成するため、下記の通りボタン(キー)を作成しています。
そしてキー(画面に表示したボタン)を押すと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()  //ボタンの色変更
    }

よろしくお願いします。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

NSTimerを活用してください。
var timer: NSTimer? = nil

func btnDown49(sender: UIButton) {
    println("down")
    btnRepeat49(NSTimer(timeInterval: 0, target: self, selector: "", userInfo: 0.5, repeats: false))
}

func btnUp49(sender: UIButton) {
    println("up")
    self.timer?.invalidate()
    self.timer = nil
}

func btnRepeat49(timer: NSTimer) {
    println("repeat \(timer.userInfo)")
    self.timer = NSTimer.scheduledTimerWithTimeInterval(timer.userInfo as! Double, target: self, selector: "btnRepeat49:", userInfo: 0.25, repeats: false)
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/06 21:49 編集

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

    キャンセル

  • 2015/07/06 21:55

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

    キャンセル

  • 2015/07/06 22:02 編集

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

    キャンセル

  • 2015/07/06 22:20 編集

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

    消去•••

    キャンセル

  • 2015/07/06 22:30

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

    キャンセル

  • 2015/07/06 23:02 編集

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

    よろしくお願いいたします。

    •••間違ったコードの消去

    キャンセル

  • 2015/07/06 23:42

    もともとuserInfoで渡していた遅延時間値を削除しないでください。
    userInfoは「任意のオブジェクト」なので、NSDictionalyなどを使って複数の値を渡すようにしてください。

    それ以前に、proxyを引数で渡す必要あるんですか?
    btnRepeat49()メソッドからもtextDocumentProxyが参照できるのでは?

    キャンセル

  • 2015/07/07 08:27

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

    ありがとうございました。

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/06 17:28

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

    キャンセル

  • 2015/07/06 17:37

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

    キャンセル

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    swift ナビゲーションバー

    初めまして! swift入門者です。 現在、下図の用なUIを作っています。 hogeの部分はナビゲーションのタイトルで、黄色の箇所はviewとbuttonで表してます。 こ

  • 解決済

    swift : textFieldが複数ある場合に、datepickerの定義の方法

    現在、iphoneアプリを作成しているswift初心者です。 日付の期間指定の部分をを作成していまして、 FromのtextFieldをタップすると、datepickerが表示さ

  • 解決済

    Swift2, SpriteKitのSKActionについて質問です

    問題を出題して、違う答えをタップしたら ×と表示させて、その後消える。 と言った動きをしたいのですが、上手くいきません。 最初の一回目は上手くできるのですが、2回目以降が上手く

  • 解決済

    swift Button タップ スワイプ

    現在、タップとスワイプの二つを一つのボタンで行おうとしています。 ボタンをタップしたらUIViewを出して ボタンをスワイプしたらそのボタンが指に沿って移動する・・・

  • 解決済

    Swiftの座標取得ができないです...

    座礁取得をするコード(コピペなのですが) を記述してみたら Cannot call value of non-function type '((UIView?) -> CG

  • 受付中

    classからUIButtonを作成したい

    viewcontrollerに複数のボタンを作成したいため、classを使って制御をしようと思いこのサイトを参考に作成しましたが、 self.view.addSubview(my

  • 解決済

    CAGradiationLayerの動作が遅い

    はじめまして、質問をご覧頂いてありがとうございます。 現在、iOS8・Xcode7.3、swift2という環境でStoryBoardを利用せずにiOSアプリの開発を行っています。

  • 解決済

    viewDidLoadでセットしたviewの設定を変えるには?

    viewDidLoadでセットしたviewを、状況に応じて隠したり表示したりしたいのですが、下記のコードを実行しようとすると、下から3行目の、肝心の view1.hidden = 

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

  • Swift

    7448questions

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

  • トップ
  • Swiftに関する質問
  • キーボード作成中です。キーリピートをしたいんですかが、キーが押されたままの判定の仕方をしりたい