问题实际上解释了这一切。
我使用以下代码在我当前视图的顶部加载了一个自定义UIView:
- (void)showView
{
self.blurView.alpha = 0.f;
[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^
{
self.blurView.alpha = 1.f;
} completion:^(BOOL finished) {
[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^
{
self.blurView.alpha = 0.f;
} completion:nil];
}];
}
它可以工作,但是当我再次执行 - (void)showView 而仍然是动画时,自定义视图不会从屏幕上删除。
它就像这样:
答案 0 :(得分:1)
我弄清楚问题是什么。
blurView
是一个公共变量,每次我-(void)showView
使用相同的变量时,将alpha设置为0.f只需一次,因此永远不会更改第一个节目的alpha。
我在方法本身中声明了变量blurView
,现在它可以正常工作,因为每个blurView
都会获得它自己的指针。
-(void)someMethod
{
//Create a live blur view
FXBlurView *blurView = [[FXBlurView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
blurView.center = CGPointMake(self.view.window.frame.size.width / 2, self.view.window.frame.size.height / 2);
blurView.layer.cornerRadius = 20.f;
[self.view.window addSubview:blurView];
[self showView:(blurView)];
}
- (void)showView:(FXBlurView *)blurView
{
//Make full transparent before showing
blurView.alpha = 0.f;
//Start animation
[FXBlurView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^
{
blurView.alpha = 1.f;
} completion:^(BOOL finished) {
if (finished)
{
//End animation
[FXBlurView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^
{
blurView.alpha = 0.f;
} completion:nil];
}
}];
}
答案 1 :(得分:0)
您应在此行的顶部添加以下内容:
[self.view.layer removeAllAnimations];
它将删除所有活动动画。
答案 2 :(得分:0)
它不起作用,因为你已经实现了延迟,使用带有延迟的动画块 - 它将创建可以使用上述功能删除的动画关键点。
[UIView animateWithDuration:0.3 delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^
{
// ...
} completion:NULL];