0

我遇到了 UIPanGestureRecognizer 的问题。假设我在添加第一个按钮时使用不同的标签动态添加 10 个按钮,然后尝试将其拖到其他地方,然后它可以正常工作。然后,如果我添加其他按钮,然后尝试拖动第二个按钮,那么它甚至可以正常工作,但是如果那时我会拖动第一个按钮,那么它不会被拖动。日志中显示的消息是忽略对 [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 回答