2011-03-03 60 views
6

我有以下代碼:用的UIView和動畫完成塊的用戶交互

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     imageView.bounds = endBounds; 
    } 
    completion:^(BOOL finished) { 
     [UIView animateWithDuration:2.0 delay:0.5 options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        imageView.bounds = startBounds; 
       } 
       completion:^(BOOL finished) { 
         [imageView removeFromSuperview]; 
       }]; 
    }]; 

另外我有:

[imageView setUserInteractionEnabled:YES]; 

和敲擊手勢識別器組將處理用戶敲擊ImageView的。當第一個動畫正在發生時,手勢識別器按照我的預期發射。但是如果我嘗試在完成塊的鏈接動畫期間點擊imageView,即使設置了適當的選項,也不會有任何反應。

任何人有任何想法?我GOOGLE了,找不到答案。

+0

對不起,代碼格式不對... – 2011-03-03 13:20:09

+0

歡迎在SO。我將iphone標籤添加到您的問題中(如果我錯了,請修復它),今後先嚐試使用描述平臺和編程語言的標籤,然後再添加一些特定的標籤 – 2011-03-03 13:33:10

+0

感謝您的編輯!非常感激。 – 2011-03-03 13:45:48

回答

5

我想出了一個解決方案:

我包裹的UIImageView在一個UIView(I子類的UIView)具有相同的邊界/中心點作爲圖像。然後我將手勢識別器附加到包裝器上,而不是圖像。由於包裝的邊界矩形/中心點在動畫持續時間內永遠不會改變,因此始終可用作手勢的目標。

這工作得很好。

-j

+0

這實際上是今天唯一的解決方案。我正在使用UIViewPropertyAnimator,並且在附加了手勢識別器的動畫視圖之後,由於某種原因它丟失了手勢識別器。唯一的解決方法是在容器視圖中放置要設置動畫的視圖並將手勢識別器添加到該容器視圖。然後你爲視圖添加動畫(而不是容器視圖)。 – 2017-01-14 11:38:52

0

你看到相同的行爲,如果你使用:

+ [UIView setAnimationDidStopSelector:] 

而不是使用塊?

+0

我還沒有試過。這是舊式的,對吧?這是我第一次嘗試iPhone開發,我想我會先嚐試使用推薦的方法。我可以稍後再說。 – 2011-03-03 14:28:11

+0

順便說一句,我應該提到,'startBounds'是從當第一加載圖像的原始矩形和'endBounds'具有除了0高度(因此圖像消失)相同的尺寸。是否有可能在完成後,sdk看到高度爲0的邊界框,假定圖像不再可見並禁用所有用戶交互? – 2011-03-04 04:44:39

+0

更新:發生相同的行爲 - 因爲沒有手勢被觸發。 – 2011-03-06 07:02:05

27

當使用新的動畫塊,如果你想在動畫過程中啓用用戶交互,你必須將其設置在選擇面膜。例如:

[UIView animateWithDuration:1.0 
         delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ myView.alpha = 0.5; } 
       completion:NULL];
+3

當延遲不是0時,它不能接收觸摸。 – Burak 2013-04-05 07:46:48