Как динамически называть UIB-кнопки внутри цикла и как делать анимацию - PullRequest
0 голосов
/ 30 марта 2011

Я создаю в этом коде 7 кнопок с разными именами и устанавливаю тег и рамку для каждой кнопки.

Если я нажимаю определенную кнопку, она вызывает buttonPresed: и переходит в оператор switch, разветвляясь в соответствии с тегом.Однако, если я нажму одну из кнопок 1, 2, 3, 4, 5 или 6, то последняя кнопка перемещается вверх и вниз.Я не хочу, чтобы эта кнопка двигалась;Я хочу, чтобы каждая кнопка в соответствии с тегом двигалась.

-(void)btnMethod
{
    for(int i1=0;i1<[characters11arrary count];i1++)
    {
        NSString *str=[[NSString alloc]init];
                  str=[characters11arrary objectAtIndex:i1];

        NSInteger idcard = [str integerValue];
        idcard--;

        btn=[[UIButton alloc]initWithFrame:CGRectMake(-15,140+w11,70,55)];
        [btn setBackgroundImage:[arrayPlayerCard objectAtIndex:idcard] forState:UIControlStateNormal];

        btn.tag=j11;
        [btn addTarget:self action:@selector(buttonPresed:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn];     
        w11+=20;
        j11+=1; 
        idcard=0;
    }

}
-(void)buttonPresed:(id)sender
{
    UIButton *btnTag=(UIButton*)sender;
    d =btnTag.tag;
    NSLog(@"tagc= %i",d);
  switch(d)
    {
        case 1:
            if(t==1)
            {

            [UIView beginAnimations:nil context:nil];           
            [UIView setAnimationDuration:0];
            [UIView setAnimationBeginsFromCurrentState:YES];
            CGAffineTransform transform1 =CGAffineTransformMakeTranslation(30,0);               

            [btn setTransform:transform1];              
             t=0;
             break;
            }
            else //if(t==0)
            {
                [UIView beginAnimations:nil context:nil];           
                [UIView setAnimationDuration:0];
                [UIView setAnimationBeginsFromCurrentState:YES];
                CGAffineTransform transform1 = CGAffineTransformMakeTranslation(0,0);   
                [btn setTransform:transform1];
                t=1;
                break;

            }
case 2:....................................
.......................................................
}

1 Ответ

2 голосов
/ 30 марта 2011

вы используете [btn setTransform:...] вместо [sender setTransform:...]
думаю, что 'btn' имеет адрес последней выделенной кнопки, поэтому ваша функция перемещается каждый раз, когда последняя кнопка.

и если вы используете отправителя, вам не нужен переключатель.

-(void)buttonPresed:(id)sender
{
if ([sender transform].ty == 0) {
    [UIView beginAnimations:nil context:nil];           
    [UIView setAnimationDuration:  1];
    [UIView setAnimationBeginsFromCurrentState:YES];
    CGAffineTransform transform1 =CGAffineTransformMakeTranslation(0,-30);               

    [sender setTransform:transform1];  
    [UIView commitAnimations];
}
else{
    [UIView beginAnimations:nil context:nil];           
    [UIView setAnimationDuration:  1];
    [UIView setAnimationBeginsFromCurrentState:YES];
    CGAffineTransform transform1 =CGAffineTransformMakeTranslation(0,0);               

    [sender setTransform:transform1];  
    [UIView commitAnimations];
}
}

это работает, но ваш перевод выполняет анимацию вправо-влево не вверх-вниз, изменил это в моем коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...