2012-11-13 103 views
2

的完成塊我試圖瞭解UIView animateWithDuration:completion。我想要做的是將UIView拖入另一個UIView。如果它們相交,則將拖動的UIView的alpha設置爲0,然後將拖動的UIView重置爲其原始位置。這個想法是將一個物品拖放到一個桶中。要開始,我只是將alpha設置爲0,然後重置它。這是我對拖動視圖的移動手勢識別代碼:瞭解[UIView animateWithDuration:完成:]

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,因爲它會回到原來的中心位置。我不希望視圖可見,而它又回到原來的位置。我是否正確理解完成塊?或者這不是它的工作方式?謝謝!

+0

panViewPiece和self.dragDescriptionView有什麼區別,updateDescriptionView有什麼作用? – jrturton

+0

@jrturton抱歉代碼寫得不好。 panViewPiece和self.dragDescriptionView指向同一個對象。 updateDescriptionView現在不做任何事情。這是我將在稍後對我的觀點進行其他更新的地方。 – Crystal

回答

0

在完成塊中,您將dragDescriptionView的alpha設置回1.0後,將其設置爲0.0。那是你要的嗎?在你的問題中,聽起來你想讓panViewPiece擁有1.0的alpha值,但這不是你的代碼所做的。

+0

我想要做的是當用戶釋放UIView,使其alpha爲0,所以它看起來像UIView溶入到它被放入的容器中,然後當alpha爲0時,讓UIView快速返回到它的原來的位置,然後讓alpha回到1.0。 – Crystal

0

我不是很清楚你所看到的 - 漸變到alpha 0的作品確定,但是你說它在它返回到原始位置之前再次可見?它是否回到可見或有生命的動畫回到其原始位置?

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

相關問題