2011-03-30 6 views
0

이 코드에서는 7 개의 버튼을 다른 이름으로 만들고 각 버튼의 태그와 프레임을 설정합니다.루프 내에서 동적으로 UIButton 이름을 지정하고 애니메이션을 수행하는 방법

특정 버튼을 클릭하면 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:.................................... 
....................................................... 
} 

답변

2

그렇게 함수는 마지막 버튼을 매번 이동, 'BTN'는 마지막 할당 된 버튼의 주소를 가지고 있다고 생각 [btn setTransform:...] 대신
[sender setTransform:...]의 사용합니다.

그리고 발신자를 사용하는 경우 스위치가 필요하지 않습니다.

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

이 작동하지만, 번역은 오른쪽에서 왼쪽으로 애니메이션을하지 않습니다까지 다운, 내 코드에

+0

@Ravikant Bhardwaj의이 업데이트가 작동해야 얻었다 것을 변경 – Seega

관련 문제