【问题标题】:Understanding the completion block of [UIView animateWithDuration:completion:]了解 [UIView animateWithDuration:completion:] 的完成块
【发布时间】:2012-11-13 04:38:49
【问题描述】:

我正在努力理解UIView animateWithDuration:completion。我想要做的是将一个 UIView 拖到另一个 UIView 中。如果它们相交,请将拖动的 UIView 的 alpha 设置为 0,然后将拖动的 UIView 重置为其原始位置。这个想法是将项目拖放到存储桶中。首先,我只是将 alpha 设置为 0,然后将其重置。这是我用于拖动视图的平移手势识别器的代码:

else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        // Update the description view
        if (CGRectIntersectsRect(panViewPiece.frame, _descriptionView.frame)) {
            [UIView animateWithDuration:0.25 animations:^{
                self.dragDescriptionView.alpha = 0.0;
            }completion:^(BOOL finished) {
                if (finished) {
                    panViewPiece.center = _dragDescriptionViewOriginalCenter;
                    self.dragDescriptionView.alpha = 1.0;
                }
            }];
            [self updateDescriptionView];
        }
}

所以我认为完成块的工作方式是当第一个 animateWithDuration 完成时,将调用完成块。所以我试图在第一部分将 alpha 设置为 0,然后一旦完成,将 panViewPiece 放回其原始位置并将其 alpha 设置为 1。发生在矩形相交后,alpha 变为 0然后回到 1,因为它突然回到原来的中心。我不希望视图在弹回其原始位置时可见。我是否正确理解了完成块?或者这不是它的工作方式?谢谢!

【问题讨论】:

  • panViewPiece和self.dragDescriptionView有什么区别,updateDescriptionView有什么作用?
  • @jrturton 抱歉,代码写得不好。 panViewPiece 和 self.dragDescriptionView 指向同一个对象。 updateDescriptionView 现在什么都不做。稍后我将在这里对我的视图进行一些其他更新。

标签: ios uiview uipangesturerecognizer


【解决方案1】:

在完成块中,将 dragDescriptionView 的 alpha 设置回 1.0,然后将其设置为 0.0。那是你要的吗?在您的问题中,听起来您希望 panViewPiece 的 alpha 为 1.0,但这不是您的代码正在做的事情。

【讨论】:

  • 我想要做的是当用户释放 UIView 时,使其 alpha 为 0,因此看起来 UIView 溶解到它放入的容器中,然后当 alpha 为 0 时,让 UIView 恢复到原来的位置,然后让 alpha 恢复到 1.0。
【解决方案2】:

我不太清楚你看到了什么 - 淡入到 alpha 0 工作正常,但是你说它在返回到原始位置之前再次可见?它是动画回到可见还是动画回到原来的位置?

如果它只是出现,然后突然回到正确的位置,那么我的猜测是其他一些代码(您的问题中未显示)在您的动画块完成之前将 alpha 设置回 1 - 您这样做意识到 UIView 块动画调用是异步的,所以下面的代码将在动画执行之前或期间执行?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多