0

こんにちは私は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"];
       }
   }
4

2 に答える 2

0

これはあなたの問題です:

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

インスタンス (この場合はUIButton名前付き) へのポインターがある場合、一度に1 つのmyButtonインスタンスしか保持されません。これは、記述した「最後のボタン」でなければなりません。Objective-C (またはその他の言語) のインスタンスは、最も便利なメソッド内にあると予想されるオブジェクトに魔法のように変化しません。実際に別のインスタンスに割り当てるか、それを参照する必要があります。代わりに他のインスタンス。myButton

これは、設定してからすぐに同じ値をチェックする ( .tag)という事実によってさらに複雑になります。すべてのボタンへの適切な参照と、それらすべてを保存する場所 (NSArray など) が必要です。そうすれば、ランダム インデックスを使用して、配列からボタンを取得できますobjectAtIndex:

于 2012-08-03T06:23:42.057 に答える
0

myButtonあなたの方法には何があります-onTimerか?あなたからオブジェクトを取得して、それを操作する方が良いと思いますbuttonsArray: ...

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

...

于 2012-08-03T06:24:46.367 に答える