2013-02-15 35 views
0

我有一個UIView有一個X的起源,使其離屏幕的權利。於是,我做了關鍵幀動畫與CATransform3D:UIView 3D變換的最終框架位置

[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-view.width, 0, 0)] 

的問題是,在動畫完成後,該視圖的框架是視覺在正確的位置,但它仍然認爲它是關閉屏幕,所以我不能互動用它。記錄其框架屬性也顯示它在屏幕外,但在視覺上,它不是。

動畫的填充模式爲kCAFillModeForwards,所以動畫的最終值會粘住。

這個問題的解決方案是什麼,即在動畫之後與此視圖交互並通知視圖確實可見?

回答

0

您可以使用CAAnimation委託方法​​修復它時的動畫效果做:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { 
    ... 
} 
0

更好的答案是使用UIView的動畫方法,如animateWithDuration:動畫:完成:(並且該方法的變體)

這些方法可讓您對實際視圖屬性執行動畫,當動畫完成時,視圖位於其實際目標位置。

中心屬性是移動視圖的最簡單方法。如果您應用了變換,則框架屬性無效,但中心屬性IS始終對讀取和寫入均有效。

核心動畫只會造成您的觀點移動的錯覺。動畫發生在圖層樹的僅顯示副本上。您可以通過從圖層的presentationLayer中讀取相同的屬性來查詢動畫圖層的屬性。但是,視圖對象不會響應用戶在其明顯位置的交互。意見仍然認爲他們在原來的位置。

正如另一張海報所說,一旦動畫結束,您可以使用動畫完成委託方法將視圖移動到它的最終位置,但這是很多繁瑣的工作來完成UIView動畫爲您提供的更多內容乾淨而簡單。

+0

我正在做一個先進的關鍵幀動畫,所以簡單的UIView動畫不會削減它。 – Snowman 2013-02-16 23:39:54

0

即使在製作動畫之前,您是否可以與視圖進行交互? 是將view.userInteractionEnabled設置爲YES?