2011-05-17 49 views
0

我想爲圖層的底部翻起來的圖層創建一個動畫。想象一下頂端的視角,然後這個底視圖就會呈現出來。就像一個小巧的封面。我想要的是像標準翻轉動畫,但只看到它的一面。我在構建動畫時遇到了麻煩。UILayer自定義的'緊湊'動畫,尋找錨的幫助

問題是我得到的動畫正確接受我似乎無法創造'鉸鏈'的一部分。也就是說,鉸鏈位於中心而不是頂部。我錯過了什麼?

下面的代碼:

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
       CATransform3D frontTransform = CATransform3DIdentity; 
       frontTransform.m34 = 1.0/-850.0; 
       CATransform3D rotation = CATransform3DRotate(frontTransform, M_PI/2, 1.0, 0.0, 0.0); 
       frontTransform = CATransform3DTranslate(frontTransform, 0.0, 0.0, menuView.bounds.size.height); 
       frontTransform = CATransform3DConcat(rotation, frontTransform); 
       menuView.layer.transform = frontTransform; 

      }completion:^(BOOL finished){ 
       if (finished) { 
        [self.window sendSubviewToBack:menuView]; 
        CATransform3D backTransform = CATransform3DIdentity; 
        backTransform.m34 = 0.0f; //Must be first before setting any other properties. 
        backTransform = CATransform3DRotate(backTransform, M_PI, 0.0, 0.0, 0.0); 
        backTransform = CATransform3DTranslate(backTransform, 0.0, 0.0, 0.0); 
        menuView.layer.transform = backTransform; 
       } 
      }]; 

我想上述動畫的圖層,然後把圖層的觀點落後於完成所有其它視圖,並返回層到它的原始狀態,這樣我就可以稍後將它帶到前面。

感謝您的幫助!

回答

2

修復了這個問題。我不得不設置圖層的錨點和位置屬性。

menuView.layer.position = CGPointMake(menuView.frame.size.width/2, 0.0); 
menuView.layer.anchorPoint = CGPointMake(0.5, 0.0); 


[UIView animateWithDuration:0.8 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
       menuView.layer.magnificationFilter = kCAFilterNearest; 
       menuView.layer.edgeAntialiasingMask = kCALayerBottomEdge; 

       CATransform3D backTransform = CATransform3DIdentity; 
       backTransform.m34 = 0.0f; 
       backTransform.m43 = 0.0f; 
       backTransform = CATransform3DTranslate(backTransform, 0.0, 0.0, 0.0); 
       backTransform = CATransform3DRotate(backTransform, M_PI/2, 0.0, 0.0, 0.0); 
       menuView.layer.transform = backTransform;     

      }completion:^(BOOL finished){ 
       if (finished) { 
        NSLog(@"Position - Show Second: %@", NSStringFromCGPoint(menuView.layer.position)); 
        NSLog(@"AnchorP - Show Second: %@", NSStringFromCGPoint(menuView.layer.anchorPoint)); 
       } 
      }]; 
2

您是否嘗試將CALayer的定位點設置爲頂端?這裏在頂部中間點:

menuView.layer.anchorPoint = CGPointMake(CGRectGetWidth(menuView.bounds)/2, 0.0); 
+0

不幸的是,這並沒有奏效。它使圖層消失。 – 2011-05-18 14:45:06

+0

試試這個'menuView.layer.anchorPoint = CGPointMake(0.5,0.0);' – 2011-05-18 15:12:03

+0

呵呵,對,明白,CALayer座標系統從0.0變爲1.0,iOS上的原點位於左上角(在OSX上)會在左下方)。 – 2011-05-18 15:36:47