0

私はIOS開発にかなり慣れていません。最初に私の問題を説明しましょう。

Adobe Flashには、ムービークリップへのマウスの入力を検出できるマウスイベントがあります。たとえば、メインコンテナのムービークリップがあり、その中にオブジェクトがたくさんあるとします。これらのオブジェクトの上にマウスをドラッグすると、たとえば、色が変わります。

IOSでは、メインビューをコンテナとして使用しており、その中にいくつかのUIViewに色を設定した色(青)を設定しています。私が達成しようとしているのは、タップして指を動かし始めると、指の下にあるものの色を変えてほしいということです。私は次のコードを使用しています:

for (int i=0;i<8;i++)
{
    for(int j=0; j<8; j++)
    {
      UIPanGestureRecognizer * gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCaptured:)];
      UIView * test = [[UIView alloc] initWithFrame:CGRectMake(i*34, j*34, 32, 32)];
      [test setBackgroundColor:[UIColor blueColor]];
      [self.view addSubview:test];
      [test addGestureRecognizer:gesture];
    }
}

そしてハンドラーのために:

-(void) panGestureCaptured:(UIPanGestureRecognizer*)sender
{
    [sender.view setBackgroundColor:[UIColor redColor]];
}

しかし、問題は、最初の人の色だけが変更されるということです。そしてもちろん、これにはパフォーマンスの問題があるかもしれません。1回のキャプチャと色の変更だけで十分ですが。指が正方形の中にあると、ハンドラー/アクションが複数回呼び出されます。

それで、このタイプの問題にどのように取り組むかについての提案はありますか?

前もって感謝します。

4

1 に答える 1

1

問題は、最初のサブビューのジェスチャ認識エンジンのみが反応しているため、その領域にないジェスチャのタッチは効果がないことです。これを試すことができます:

-(void) panGestureCaptured:(UIPanGestureRecognizer*)sender
{
    for(NSUInteger i=0;i<[sender numberOfTouches];i++)
    {
        CGPoint touchPt = [sender locationOfTouch:i inView:self.view];
        for(UIView *subV in [self.view subviews])
        {   
            if(CGRectContainsPoint(c.frame, touchPt))
            {   
                subV.backgroundColor = [UIColor whiteColor]; //or whatever
                break; //assumes no overlapping
            }
        }
    }
}
于 2012-07-18T22:55:02.167 に答える