Ios 循环动画-不';不去
我试图在一个循环中重复一系列动画,在每个循环中随机改变一些参数。这是代码。有人知道它为什么不起作用吗? 如果我用一个按钮动作调用它一次,它会工作,但用一个循环它不会。 谢谢!朱塞佩Ios 循环动画-不';不去,ios,core-animation,cabasicanimation,Ios,Core Animation,Cabasicanimation,我试图在一个循环中重复一系列动画,在每个循环中随机改变一些参数。这是代码。有人知道它为什么不起作用吗? 如果我用一个按钮动作调用它一次,它会工作,但用一个循环它不会。 谢谢!朱塞佩 -(IBAction)startLoop:(id)sender { for (int i=1;i<10; i++) { [self animation2]; } } -(id) animation2 { int max=500; UIImage *myIma
-(IBAction)startLoop:(id)sender {
for (int i=1;i<10; i++) {
[self animation2];
}
}
-(id) animation2 {
int max=500;
UIImage *myImage = [UIImage imageNamed:@"coccinella2.png"];
CALayer *myLayer = [CALayer layer];
myLayer.contents = (id)myImage.CGImage;
myLayer.bounds = CGRectMake(0, 0, 50, 60);
[myLayer setPosition:CGPointMake(arc4random()%(max), arc4random()%(max))];
[myLayer setBounds:CGRectMake(0.0, 0.0, 50.0, 60.0)];
[self.view.layer addSublayer:myLayer];
//translation1
CGPoint startPt = CGPointMake(arc4random()%(max),arc4random()%(max));
CGPoint endPt = CGPointMake(arc4random()%(max),arc4random()%(max));
CABasicAnimation *transl1 = [CABasicAnimation animationWithKeyPath:@"position"];
transl1.removedOnCompletion = FALSE;
transl1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transl1.fromValue = [NSValue valueWithCGPoint:startPt];
transl1.toValue = [NSValue valueWithCGPoint:endPt];
transl1.duration = 2.0;
transl1.fillMode = kCAFillModeForwards;
transl1.beginTime = 0;
//scale 1
CABasicAnimation *scale1 = [CABasicAnimation
animationWithKeyPath:@"transform.scale"];
scale1.removedOnCompletion = FALSE;
[scale1 setToValue:[NSNumber numberWithInt:3]];
[scale1 setDuration:2.0f];
scale1.fillMode = kCAFillModeForwards;
scale1.beginTime = 0;
//rotation1
CABasicAnimation *rotation1 = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
rotation1.removedOnCompletion = FALSE;
[rotation1 setFromValue:DegreesToNumber(0)];
[rotation1 setToValue:DegreesToNumber(90)];
//rotation1.repeatCount = HUGE_VALF;
[rotation1 setDuration:2.0f];
rotation1.fillMode = kCAFillModeForwards;
rotation1.beginTime = 0;
//group
CAAnimationGroup* group = [CAAnimationGroup animation];
[group setDuration: 6.0];
group.removedOnCompletion = FALSE;
group.fillMode = kCAFillModeForwards;
[group setAnimations: [NSArray arrayWithObjects:scale1, transl1, rotation1, nil]];
[myLayer addAnimation: group forKey: nil];
}
-(iAction)startOOP:(id)发送方{
对于(int i=1;i您的代码不会重复注释10次,但会立即启动10个动画。如果您的目标是在前一个动画结束后启动动画,则应尝试使用NSTimer
您可以使用NSTimer在不同的时间触发每组动画,也可以使用代码如下:
group.beginTime = CACurrentMediaTime() + delay;
对于动画,使用beginTime可以提供更精确的计时,因为CA是在单独的线程上运行的,如果应用程序繁忙,它不会像NSTimer那样暂停。谢谢,我的目标是连续重复动画,例如每0.1秒,我如何调用该方法?谢谢,我的目标是连续重复动画,例如e每0.1秒,我如何调用“animation2”方法?如果希望动画重复,请不要使用for循环并创建多个动画。在组动画上设置repeatCount属性,系统将在一个简单的步骤中为您完成。是否希望每个步骤都从另一个步骤停止的地方开始?如果是,请将removedOnCompletion属性设置为false,并设置fillMode到kCAFillModeForwards。(对所有单个动画执行最后两项操作,并为单个动画和组设置removedOnCompletion。)