![](/img/trans.png)
[英]Remove UIView inside the completion block of 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.