如何在动画结束时删除UIView?

时间:2011-03-28 23:15:30

标签: objective-c ipad animation uiview

我想在动画完成后删除此标签。我想在touchesEnded函数中的下面代码中动画时再也看不到它。我没有看到一种方法来检查lbl.isAnimating是否已经在for循环中忽略它(没有创建我自己的UILabels列表),但我认为我的完成代码在这里可行。但是在动画结束后,如果我点击隐形标签,我仍然会陷入if块内。

    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;
                         }
         ];
       }
     } 

2 个答案:

答案 0 :(得分:0)

覆盖

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

并把:

[lbl removeFromSuperview];
lbl.hidden=YES;

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

答案 1 :(得分:0)

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

    if ( found ) [mLabelOutletCollection removeObject:lbl];