use*_*984 3 iphone xcode cocoa-touch objective-c ios
在调用第二个动画后,如何让一个动画永远继续?例如:
1)启动物体脉动2)在脉动时移动它3)它继续脉动
一切正常,除了第二个动画无限期地停止第一个动画.以下是一些示例代码:
//Pulsate **
[UIView animateWithDuration:0.25
delay:0
options: (UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat)
animations:^{
CGAffineTransform currentTransform = self.transform;
CGAffineTransform newTransform1 = CGAffineTransformScale(currentTransform, .95, .95);
[self setTransform:newTransform1];
CGAffineTransform newTransform2 = CGAffineTransformScale(currentTransform, 1, 1);
[self setTransform:newTransform2];
}
completion:nil];
//Move **
[UIView animateWithDuration:0.30
delay:0
options: (UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState )
animations:^{
[[(UIPinchGestureRecognizer*)sender view] setCenter:CGPointMake(myAppDelegate.MCViewReference.center.x-300, myAppDelegate.MCViewReference.center.y)];
}
completion:^(BOOL finished){
}];
Run Code Online (Sandbox Code Playgroud)
您将无法使用基于块的动画执行此操作,因为您在此处拥有它们.您需要使用显式动画分割动画CABasicAnimation.为脉动效果创建一个动画,并将其设置为无限重复.然后你可以通过设置中心(动画或非动画)来移动它.
CABasicAnimation *pulsation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
pulsation.fromValue = [NSNumber numberWithFloat:0.95f];
pulsation.toValue = [NSNumber numberWithFloat:1.f];
pulsation.duration = 0.25f;
pulsation.autoreverses = YES;
pulsation.repeatCount = INFINITY;
[self.layer addAnimation:pulsation forKey:@"pulse"];
Run Code Online (Sandbox Code Playgroud)
只要将动画添加到图层,它就会开始动画制作.要删除动画,只需调用[self.layer removeAnimationForKey:@"pulse"或removeAllAnimations:.