在动画制作时再次加载时,自定义UIView不会从超级视图中删除

时间:2013-09-23 20:26:50

标签: iphone ios objective-c animation uiview

问题实际上解释了这一切。

我使用以下代码在我当前视图的顶部加载了一个自定义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 仍然是动画时,自定义视图不会从屏幕上删除。

它就像这样:

enter image description here

3 个答案:

答案 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];