1

アプリに 6 つのキーを備えた仮想キーボードがあり、全体は で実装された単なるイメージUIImageViewです。各「キー」の画像に対応する正確な x 座標と y 座標を特定し、次のコードを使用してキーボードを操作するユーザーに応答しました。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [[event allTouches] anyObject];
    CGPoint point = [touch locationInView:touch.view];
    if(point.y < 333 && point.y > 166 && point.x < 72 && point.x > 65)
    {
    NSLog(@"Key pressed");
    }
    //Repeat per key...
}

ただし、この方法はあまりスマートではないことに気付きました。電話の視点 (縦から横) を変更したり、デバイスを変更したりすると、x 座標と y 座標が台無しになり、問題が発生するためです。

したがって、x と y の絶対値を指定し、一般的に touchesMoved を使用する代わりの方法を探しています。理想的には、タップされた場合、またはユーザーがボタンの領域に指をドラッグした場合 (たとえ非常にゆっくりでも - 以前はスワイプ検出を使用していましたが、それにはあまりにも多くの時間が必要でした)、特定の設定を持つボタンです。誇張された動き)。

ボタンがタップされた場合、またはタッチイベントがボタンの外で開始されてからボタンに進んだ場合に、そのメソッドを呼び出すようにボタンを設定することは可能ですか? そうでない場合、私の代替手段は何ですか?

ありがとうSE!

4

1 に答える 1

0

winSize画面サイズで発生している問題を解決するプロパティを取得する必要があります。

CGSize size = [[CCDirector sharedDirector]winSize];

Cocos2D を使用していると思いますか? その場合、size数値をハードコーディングする代わりにこのプロパティを使用できます。:)

ポイントを変換するには、使用します

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector]convertToGL:location];

ボタンの境界/ボックス内にあるかどうかを確認するには、次を試してください。

if (CGRectContainsPoint ([self.myButton boundingBox], location)
{
//Execute method 
}

これはすべて、ボタンにCocos2Dとを使用していることを前提としています。CCSpriteこれは、任意の画面サイズと縦向きまたは横向きで機能するはずです:)

于 2013-06-13T01:15:08.333 に答える