UIPanGestureRecognizer no funciona en el botón

Tengo un problema con UIPanGestureRecognizer. supongamos que estoy agregando 10 botones dinámicamente usando diferentes etiquetas cuando agrego el primer botón, intento arrastrarlo a otro lugar, entonces funciona bien. y luego, si agrego otro botón, trato de arrastrar ese segundo botón, incluso funciona bien, pero si quisiera arrastrar el primer botón, entonces no se está arrastrando y. y el mensaje que se muestra en el registro es Ignorar la llamada a [UIPanGestureRecognizer setTranslation:inView:] ya que el reconocedor de gestos no está activo. el gesto solo funciona en el botón agregado recientemente. a continuación se muestra el código que estoy usando


Aquí está el código para agregar botones

    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];

aquí está el código para el gesto

    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];

preguntado el 01 de julio de 12 a las 09:07

1 Respuestas

Sospecho que el problema se reduce a esto:

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

Tiendo a pensar por tu código que gesture es alguna propiedad en su clase. En este caso, está anulando constantemente el antiguo gesture cuando creas uno nuevo. Eso también explicaría el comportamiento que describes.

EDIT:

no es estrictamente necesario que almacene sus reconocedores de gestos en una propiedad; bastaría con hacer:

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

entonces, cuando el labelDragged se llama al método, puede usar su recognizer argumento para saber qué reconocedores de gestos dispararon:

- (void)labelDragged:(UIGestureRecognizer *)gestureRecognizer;

Respondido 01 Jul 12, 11:07

Como soy nuevo, ¿podría explicarme cómo usarlo? por no anular el evento. - Ksk

Me alegro de que haya ayudado. No estoy en facebook, pero si vas a mi perfil, encontrarás cómo ponerte en contacto conmigo. - sergio

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.