停止特定的 UIView 动画块 - iOS
Stop specific UIViewAnimation block - iOS
我有一个 iOS 应用程序,它运行几个不同的 UIViewAnimation
块来为屏幕上的几个不同对象设置动画。这一切都有效,但是我怎样才能停止其中一个动画块而不停止其余的呢?
我试过使用以下方法:
[button.layer removeAllAnimations];
但它什么也没做,动画只是继续。
然后我尝试使用一个简单的 BOOL
值,并在 BOOL
设置为 "NO" 后从方法中获取动画到 return
,但这并没有也不工作。
这是我要停止的动画:
-(void)undo_animation:(int)num {
// Fade out/in the number button label
// animation which lets the user know
// they can undo this particular action.
[UIView animateWithDuration:0.5 delay:0.2 options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{
// Mostly fade out the number button label.
((UIButton *)_buttons[num]).alpha = 0.2;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5 delay:0.2 options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{
// Fade in the number button label.
((UIButton *)_buttons[num]).alpha = 1.0;
} completion:^(BOOL finished) {
// Stop the animation if the BOOL
// is set to 'NO' animations.
if (anim_state_button == NO) {
return;
}
}];
}];
}
谢谢,丹。
我认为简单的方法是从视图层中删除所有动画,因为默认情况下所有动画都添加到视图层中。
[yourRequiredView.layer removeAllAnimations];
我的理解是,从相关图层中删除所有动画应该停止所有动画。 [((UIButton *)_buttons[num]).layer removeAllAnimations];
怎么样?
如果您使用的是 UIKit 动画,则无法实现 运行 动画 属性。所以如果你想在运行时修改动画,我建议使用 Core Animation。
像下面这样删除视图的 alpha 太简单了。
CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadein setToValue:[NSNumber numberWithFloat:1.0]];
[fadein setDuration:0.5];
[[moviepic layer]addAnimation:fadein forKey:@"MyAnimation"];
将动画添加到图层后动画将开始,然后您可以使用委托方法来通知 animationDidFinish: 方法
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSLog(@"Animation interrupted: %@", (!flag)?@"Yes" : @"No");
}
你也可以随时使用;
[[moviepic layer] animationForKey:@"MyAnimation"];
当然,您需要将 CoreAnimation Framework 添加到您的项目中。
希望对您有所帮助。
我有一个 iOS 应用程序,它运行几个不同的 UIViewAnimation
块来为屏幕上的几个不同对象设置动画。这一切都有效,但是我怎样才能停止其中一个动画块而不停止其余的呢?
我试过使用以下方法:
[button.layer removeAllAnimations];
但它什么也没做,动画只是继续。
然后我尝试使用一个简单的 BOOL
值,并在 BOOL
设置为 "NO" 后从方法中获取动画到 return
,但这并没有也不工作。
这是我要停止的动画:
-(void)undo_animation:(int)num {
// Fade out/in the number button label
// animation which lets the user know
// they can undo this particular action.
[UIView animateWithDuration:0.5 delay:0.2 options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{
// Mostly fade out the number button label.
((UIButton *)_buttons[num]).alpha = 0.2;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5 delay:0.2 options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{
// Fade in the number button label.
((UIButton *)_buttons[num]).alpha = 1.0;
} completion:^(BOOL finished) {
// Stop the animation if the BOOL
// is set to 'NO' animations.
if (anim_state_button == NO) {
return;
}
}];
}];
}
谢谢,丹。
我认为简单的方法是从视图层中删除所有动画,因为默认情况下所有动画都添加到视图层中。
[yourRequiredView.layer removeAllAnimations];
我的理解是,从相关图层中删除所有动画应该停止所有动画。 [((UIButton *)_buttons[num]).layer removeAllAnimations];
怎么样?
如果您使用的是 UIKit 动画,则无法实现 运行 动画 属性。所以如果你想在运行时修改动画,我建议使用 Core Animation。
像下面这样删除视图的 alpha 太简单了。
CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadein setToValue:[NSNumber numberWithFloat:1.0]];
[fadein setDuration:0.5];
[[moviepic layer]addAnimation:fadein forKey:@"MyAnimation"];
将动画添加到图层后动画将开始,然后您可以使用委托方法来通知 animationDidFinish: 方法
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSLog(@"Animation interrupted: %@", (!flag)?@"Yes" : @"No");
}
你也可以随时使用;
[[moviepic layer] animationForKey:@"MyAnimation"];
当然,您需要将 CoreAnimation Framework 添加到您的项目中。
希望对您有所帮助。