为什么CABasicAnimation没有动画到正确的位置?

时间:2014-09-15 02:00:09

标签: ios objective-c calayer cabasicanimation

我正在向我的应用添加一个containerView。此视图视图和图层位于正常的0,0点和320,480。没有什么令人兴奋的或不同的。

所以我将它添加到我的视图中,但我希望通过其图层在屏幕上设置动画。再也没什么可疯狂的。但我希望我添加的视图的这个视图/层位于20,160点。所以从左边20个像素到窗口的一半(窗口的下半部分)。我想我会将CALayer的animateToPoint设置为20,160。但它不起作用。

下面是我的代码,它将添加的视图/图层设置为从左侧和屏幕中间的20个像素设置动画。问题是,我传递给它的点是20,160是完全错误但是它有效(我必须通过试验移动它一个错误)。我的问题是为什么20,160不适用于CABasicaAnimation点?为什么我要输入这么多?

    // Place the container view
        self.callDetailView.view.frame = CGRectMake(20, 163, 280, 263);
        self.callDetailView.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

        [self.view addSubview:self.callDetailView.view];
        [self addChildViewController:self.callDetailView];
        [self.callDetailView didMoveToParentViewController:self];

        [self.callDetailView configureDetails:[[STRequestManager sharedInstance] shouldGetCurrentRequest]];
        CGPoint myNewEndPoint = CGPointMake(160.0,  263.0); // <-- I would think this should be 20,160
        CABasicAnimation *slideIn = [CABasicAnimation animationWithKeyPath:@"position"];
        slideIn.duration = 0.5;
        [slideIn setToValue:[NSValue valueWithCGPoint:myNewEndPoint]];
        [slideIn setFromValue:[NSValue valueWithCGPoint:CGPointMake(160.0,  663.0)]];
        [[self.callDetailView.view layer] addAnimation:slideIn forKey:@"mySlideInAnimation"];
        [[self.callDetailView.view layer] setPosition:myNewEndPoint];

// UPDATE

现在我看160,263是垂直中心点和水平中心点。我添加的视图是280,所以一半是140. 140加上我左边的20是160. CABasicAnimation是否为中心设置了动画?

1 个答案:

答案 0 :(得分:0)

默认情况下,图层的AnchorPoint为(0.5,0.5),即中心。因此,您的动画正沿着中心移动。