0

我有一個UIView。我將動畫應用到CALayer。將CALayer更改應用到UIView

[view.layer addAnimation:groupAnimation forKey:name]; 

我希望圖層的最終狀態成爲動畫後UIView的狀態。比方說,我旋轉了45度,並移動到一個新的位置使用圖層;動畫之後我的觀點能否處於這種狀態?因爲現在,在動畫之後,它會回到UIView的原始狀態。我希望能得到一些幫助。謝謝。

回答

0

要理解的是,層動畫只是動畫;它只是一種覆蓋屏幕的臨時「電影」。當動畫結束時,「電影」被刪除,從而揭示真實情況。這是由你來配合電影的最後一幀的情況。

UIView動畫在很大程度上爲您做到了這一點。但層動畫完全取決於你。

因此,假設您爲位置變化設置動畫;做一些事情,這樣圖層或視圖實際上就是你動畫完全取決於你的位置。

通常情況下,您將自己作爲一組獨立的命令執行。但要小心,不要做任何可能觸發隱式層動畫的事情,因爲這會與您正在嘗試明確執行的動畫衝突。

這裏的示例代碼(不涉及你的,但它確實表明了一般形式):

CAAnimationGroup* group = // ... 
// ... configure the animation ... 
[view.layer addAnimation:group forKey:nil]; 
// now we are ready to set up the view to look like the final "frame" of the animation 
[CATransaction setDisableActions:YES]; // do not trigger implicit animation by mistake 
view.layer.position = finalPosition; // assume we have worked this out 
+0

並從這裏開始看到我關於此主題的完整教程:http://www.apeth.com/iOSBook/ch17.html#_using_a_cabasicanimation – matt

+0

感謝您的這一點。你太棒了! – cessmestreet

-1

當動畫化的CALayer或使用CAAnimationGroup,以下屬性必須設置,如:

groupAnimation.removedOnCompletion = NO; 
groupAnimation.fillMode = kCAFillModeForwards; 

參見:After Animation, View position resets


另外請注意,它可能有助於申請動畫直接訪問視圖本身,而不是訪問視圖的圖層。這是使用動畫塊完成的,我發現它非常有用。

座風格動畫可以在許多方面進行自定義,但這裏有一個簡單的例子,它可以在一個函數中,當你需要,以動畫調用:

- (void) animateMyView 
{ 
    CGRect newViewFrame = CGRectMake(x,y,w,h); 
    [UIView animateWithDuration:0.5 
          delay:0 
         options: (UIViewAnimationOptionCurveLinear) 
        animations:^{ 
         self.myView = CGAffineTransformMakeRotation (45); 
         [self.myView setBounds:newViewFrame]; 
        } 
        completion:NULL]; 
} 

欲瞭解更多信息,請參閱Apple's documentation on View Animation

+0

我的自動佈局被禁止,但仍動畫後,它會恢復到原來的狀態。實際上,我嘗試了UIViewAnimation,但是我無法實現我想要的。 CALayer動畫更加靈活。有沒有一種方法可以確保我的UIView將處於與其動畫層相同的狀態? – cessmestreet

+0

回答更新,以包括以下信息: 當一個動畫或CALayer的使用CAAnimationGroup,以下屬性必須設置: groupAnimation.removedOnCompletion = NO; groupAnimation.fillMode = kCAFillModeForwards; 另請參閱:http://stackoverflow.com/questions/226555/after-animation-view-position-resets – JRJ

+0

以這種方式濫用'removedOnCompletion'絕對是錯誤的事情,不應該給建議 – matt