2009-01-14 164 views
2

我在一個UIView子類(下面的代碼中的CustomView)中。核心圖形繪製的核心動畫

我在UIImageView子類(containerView)中的圖像周圍繪製邊框。此核心圖形代碼位於子類中的drawInRect:的內部。

核心動畫過渡是翻轉過程,但是當繪製時,不使用核心圖形代碼,即不調用drawInRect:來爲CALayer提供我的渲染圖像。

相反,我從一個圖像獲取動畫到另一個沒有任何Core Graphics繪圖發生。

如何讓CALayer使用我的Core Graphics繪圖而不是原始圖像進行動畫製作?

[CustomView beginAnimations:@"transitionNextImage" context:nil]; 
[CustomView setAnimationDuration:2.0]; 
[containerView setImage:image]; 
[CustomView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:YES]; 
[containerView setImage:differentImage]; 
[CustomView commitAnimations]; 

回答

2

你實現drawRect:,不drawInRect:,對不對?另外,你是否證實了在這個轉換之外,它實際上起作用了?

你能否粘貼你的drawRect:執行?我只是擔心UIImageView直接設置其圖層的內容,而不是依靠drawRect:來完成,這意味着您的drawRect:不起作用。

實際上,考慮到這個實際是多麼的簡單,我建議你只需要UIView的子類而不是UIImageView。縮放圖像進行繪製時保留寬高比的數學運算非常簡單。

當然,另一種選擇是繼承UIImageView,然後重寫setImage:以創建一個基於第一個圖像的新圖像,然後在該圖像上繪製邊框,然後將其傳遞給super。這樣,你根本不需要用drawRect:做任何事情。

3

好的,是的,我實施drawRect:,是的,我的繪圖工作過渡之外。

問題是UIImageView子類中的drawRect:未被CALayer調用。

所以當我將這個子類的父母切換到UIView時,爲圖像實現了我自己的屬性,並且調整了動畫 - 所有東西都聚集在一起。

上述代碼中動畫的containerView被改爲香草UIView實例。動畫代碼必須稍微改變以適應此:

[CustomView beginAnimations:@"transitionNextImage" context:nil]; 
[CustomView setAnimationDuration:2.0]; 
[containerView addSubview:aViewSubclass]; 
[CustomView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:YES]; 
[aViewSubclass removeFromSuperview]; 
[containerView addSubview:anotherInstanceOfTheViewSubclass]; 
[CustomView commitAnimations]; 

即,從蘋果對這類過渡的文檔:

如果你想有一個過渡的 例如在更改視圖的外觀 ,翻轉從一個視圖到 另一個,然後使用一個容器視圖,一個 UIView的實例如下:

  1. 開始一個動畫塊。
  2. 設置容器視圖上的轉換。
  3. 從容器視圖中刪除子視圖。
  4. 將新的子視圖添加到容器視圖。
  5. 提交動畫塊。