0

我正在尝试为图层底部向上翻转的图层创建动画。想象一个铰接在顶部的视图,然后底部动画向上。就像一个紧凑的封面。我想要的是标准的翻转动画,但只能看到它的一侧。我只是在构建动画时遇到了麻烦。

问题是我得到了正确的动画接受我似乎无法创建“铰链”部分。也就是说,铰链位于中心而不是顶部。我错过了什么?

这是代码:

   [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;
                }
            }];

我正在尝试如上所述为图层设置动画,然后在完成时将图层的视图发送到所有其他视图后面,并将图层返回到其原始状态,以便稍后将其带到前面。

谢谢您的帮助!

4

2 回答 2

2

你试过把CALayer的锚点设置在顶部吗?在顶部中间点:

menuView.layer.anchorPoint = CGPointMake(CGRectGetWidth(menuView.bounds)/2, 0.0);
于 2011-05-18T14:11:36.147 回答
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));
                }
            }];
于 2011-05-22T17:52:34.483 回答