【问题标题】:How to remove a UIView at the end of an animation?如何在动画结束时删除 UIView?
【发布时间】:2011-03-28 23:15:30
【问题描述】:

我希望在动画完成后移除此标签。在我的 touchesEnded 函数中的以下代码中制作动画时,我不想再看到它。我看不到检查 lbl.isAnimating 是否已经在 for 循环中忽略它的方法(没有创建我自己的 UILabels 列表),但我认为我的完成代码在这里会起作用。但是在动画结束后,如果我点击不可见的标签,我仍然会陷入 if point is inside block。

    for( lbl in mLabelOutletCollection ) {

      if (CGRectContainsPoint([lbl frame], [touch locationInView:self.view]))
      {

        [UIView animateWithDuration:1.0 delay:0.0
                options:(UIViewAnimationOptionAllowUserInteraction)
                         animations:^{
                             lbl.alpha = 0.0;
                             lbl.transform = CGAffineTransformMakeScale(1.5, 1.5); 
                         }

                         completion:^(BOOL  completed){
                             [lbl removeFromSuperview];
                             lbl.hidden=YES;
                         }
         ];
       }
     } 

【问题讨论】:

    标签: objective-c ipad animation uiview


    【解决方案1】:

    覆盖

    - (void)finishAnimation:(NSString *)animationId finished:(BOOL)finished context:(void *)context {
    

    然后把:

    [lbl removeFromSuperview];
    lbl.hidden=YES;
    

    那里。 另外,不确定,但我不相信您需要第二行 lbl.hidden;因为您已经将其从超级视图中删除了。

    【讨论】:

    • 这不是老办法吗?我的完整函数被调用,但我猜标签仍然响应,因为它仍然存在于 IBOutletCollection 中......
    【解决方案2】:

    我通过添加一个布尔值并在循环之后执行此操作来解决这个问题。即使 lbl 被删除,它仍然存在于 OutletCollection 中并记住它的位置。我之前尝试过,但在循环中执行它会导致异常。

        if ( found ) [mLabelOutletCollection removeObject:lbl];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多