您好我有一个按钮列表,我正在使用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"];
}
}
答案 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];
...