0

UIPanGestureRecognizer で問題に直面しています。最初のボタンを追加するときに、異なるタグを使用して10個のボタンを動的に追加し、それを他の場所にドラッグしようとすると、正常に動作するとします。次に、他のボタンを追加してからその2番目のボタンをドラッグしようとすると、うまく機能しますが、最初のボタンをドラッグしてドラッグすると、ドラッグされません。ログに表示されるメッセージは、ジェスチャ認識エンジンがアクティブでないため、[UIPanGestureRecognizer setTranslation:inView:] への呼び出しを無視しています。ジェスチャは、最近追加されたボタンでのみ機能します。以下は私が使用しているコードです


ボタンを追加するコードは次のとおりです

    NSUInteger counter = 1;
    if([ButtonArray count] !=0 ){
        NSLog(@"%d",[ButtonArray count]);
        NSLog(@"hi");
        counter = [ButtonArray count] + 1;

    }
    [ButtonArray addObject:[NSString stringWithFormat:@"%d",counter]];
    NSLog(@"%d",1);
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn setTag:counter];
    btn.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    //[btn addTarget:self action:@selector(Dragged:withEvent:) forControlEvents:UIControlEventTouchDragInside];
    //[self.view addSubview:btn];
    btn.userInteractionEnabled = YES;

    gesture = [[UIPanGestureRecognizer alloc] 
                                        initWithTarget:self 
                                        action:@selector(labelDragged:)];
    [btn addGestureRecognizer:gesture];
    // add it

[self.view addSubview:btn];

ここにジェスチャーのコードがあります

    UIButton *button = (UIButton *)gesture.view;

CGPoint translation = [gesture translationInView:button];


// move button
button.center = CGPointMake(button.center.x + translation.x, 
                           button.center.y + translation.y);

// reset translation
[gesture setTranslation:CGPointZero inView:button];

4

1 に答える 1

1

問題はこれに帰着すると思います:

gesture = [[UIPanGestureRecognizer alloc] 
                                    initWithTarget:self 
                                    action:@selector(labelDragged:)];

あなたのコードから、gestureあなたのクラスのプロパティであると考える傾向があります。この場合gesture、新しいものを作成するときに常に古いものを上書きしています。それはまた、あなたが説明する動作を説明します。

編集:

ジェスチャ レコグナイザーをプロパティに保存する必要は厳密にはありません。するだけで十分です:

UIPanGestureRecognizer* localgesture = [[UIPanGestureRecognizer alloc] 
                                    initWithTarget:self 
                                    action:@selector(labelDragged:)];
[btn addGestureRecognizer:localgesture];

次に、labelDraggedメソッドが呼び出されたときに、そのrecognizer引数を使用して、どのジェスチャ レコグナイザーが起動したかを知ることができます。

- (void)labelDragged:(UIGestureRecognizer *)gestureRecognizer;
于 2012-07-01T08:08:23.627 に答える