如何在ios中使用for循环显示随机显示的每个按钮

时间:2012-08-03 06:08:55

标签: objective-c ios

您好我有一个按钮列表,我正在使用for循环显示。我想动画随机按钮可以任何人帮助我。这是我正在尝试的代码,这个代码只有最后一个按钮是连续动画。

 -(void)arrangeFavouriteWords
  {
       [buttonsArray removeAllObjects];
       buttonsArray = [[NSMutableArray alloc]init];
       for(int i=0;i<count1;i++)
       {
           WordObject *favObj = [databaseArray objectAtIndex:i];
           float height = [MainViewController    calculateHeightOfTextFromWidth:favObj.wordName :fontValue : buttonWidth :UILineBreakModeCharacterWrap];
          myButton = [[MyCustomButton alloc]initWithIdValue:favObj.wordName];
         myButton.backgroundColor = [UIColor clearColor];
         myButton.frame = CGRectMake(0,yCoordinate,buttonWidth,height);
         myButton.tag = i;
        [myButton.titleLabel setFont:fontValue];
        [myButton setTitleColor:color forState:UIControlStateNormal];
        [myButton setTitle:favObj.wordName forState:UIControlStateNormal];
         [myButton addTarget:self action:@selector(wordClicked:)  forControlEvents:UIControlEventTouchUpInside];
        myButton.contentHorizontalAlignment = NO;
        [buttonsArray addObject:myButton];
        [displayView addSubview:myButton];
        [myButton release];
        yCoordinate = yCoordinate + height;
       }
     NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:(0.5) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
 }
-(void)onTimer
 {

        int randomIndex = arc4random() % [buttonsArray count];
        printf("\n the random index is :%d",randomIndex);
        myButton.tag = randomIndex;
       if(randomIndex == myButton.tag)
       {
          CABasicAnimation *theAnimation;
          theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.scale"];
          theAnimation.duration=1.0;
          //theAnimation.repeatCount=HUGE_VALF;
           theAnimation.autoreverses=YES;
         theAnimation.fromValue=[NSNumber numberWithFloat:1.25f];
         theAnimation.toValue=[NSNumber numberWithFloat:1.0f];
         [myButton.layer addAnimation:theAnimation forKey:@"transform.scale"];
       }
   }

2 个答案:

答案 0 :(得分:0)

这是你的问题:

    myButton.tag = randomIndex;
   if(randomIndex == myButton.tag)

你看,当你有一个指向实例的指针(在这种情况下,UIButton名为myButton)时,它只包含 一个 一次一个实例,它必须是您描述的“最后一个按钮”。 Objective-C(或任何其他语言)中的实例不会神奇地变形为您希望它们在最方便的方法中的对象。您需要实际将myButton分配给不同的实例,或者引用其他实例。

由于您正在设置,然后立即检查相同的值(.tag),这更加复杂,这类似于说“X现在是3.如果X是3,那么。 ..“即可。您需要对每个按钮进行适当的引用,并在某些地方存储所有按钮(例如,NSArray)。这样,您可以使用随机索引从objectAtIndex:的数组中检索按钮。

答案 1 :(得分:0)

myButton方法中的-onTimer是什么?我想从你的buttonsArray获取对象并使用它会更好: ...

int randomIndex = arc4random() % [buttonsArray count];
UIButton *animatableButton = [buttonsArray objectAtIndex:randomIndex];

...