簡體   English   中英

了解[UIView animateWithDuration:completion:]的完成塊

[英]Understanding the completion block of [UIView animateWithDuration:completion:]

我試圖了解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。發生什么事情是在rects相交之后,alpha變為0然后返回到1,因為它恢復了其原始中心。 我不希望該視圖捕捉到其原始位置時可見。 我是否正確理解完成塊? 還是這不是它的工作方式? 謝謝!

在完成塊中,將dragDescriptionView的動畫降低到0.0后,將其alpha設置回1.0。 那是你要的嗎? 在您的問題中,聽起來好像您希望panViewPiece的alpha為1.0,但這不是您的代碼正在做的事情。

我不太清楚您所看到的內容-淡入Alpha 0的效果還可以,但是您說它在返回原始位置之前又可以看見了嗎? 是將動畫恢復為可見還是將動畫恢復為原始位置?

如果它只是出現,那么突然回到正確的位置,那么我的猜測是,在動畫塊完成之前,其他一些代碼(問題中未顯示)將alpha設置為1-您確實意識到UIView塊動畫調用是異步的,因此以下代碼將在動畫執行之前或期間執行?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM