0

我在 CCLayer 上添加了一个 tableView 作为子视图到[[ CCDirector sharedDirector ]view]。然后我使用以下代码分别为CCLayertableView设置了动画:

此代码将CCLayer 移动到右侧和左侧

-(void)moveHomeScreenLayerWithIsAnimated:(BOOL)_isAnimationRight{

    if (!_isAnimationRight) {
        [mHomeLayer runAction:[CCSequence actionOne:[CCDelayTime actionWithDuration:0.0f]   two:[CCMoveTo actionWithDuration:0.4f position:ccp((size.width/4)*3, 0)]]];
    }
    else{
        [mHomeLayer runAction:[CCSequence actionOne:[CCDelayTime actionWithDuration:0.0f] two:[CCMoveTo actionWithDuration:0.4f position:ccp(0, 0)]]];
    }
}

对于tableView 的动画

-(void)ViewAnimationRight{

    [UIView cancelPreviousPerformRequestsWithTarget:self];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.4f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    tableViewHome.frame = CGRectMake(size.width - size.width/4,topBar.contentSize.height, size.width, size.height);
    [tableViewHome setScrollEnabled:NO];

    [UIView commitAnimations ];
}

-(void)ViewAnimationLeft{
    [UIView cancelPreviousPerformRequestsWithTarget:self];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.4f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    tableViewHome.frame = CGRectMake(0, topBar.contentSize.height, size.width, size.height);
    [tableViewHome setScrollEnabled:YES];

    [UIView commitAnimations ];
}

CCLayer 和 tableView 都有动画,但它们的动画不同步。动画持续时间不匹配。有没有其他办法。感谢大家的帮助。

4

3 回答 3

0

尝试将调用同步到调用位置的两个函数。确保调用之间没有繁重的代码来增加延迟。那可能对你有帮助。

于 2013-05-14T06:14:09.420 回答
0

尝试这个 :

首先在您的 uiview 的 x 位置设置 320

//right to left animation
CGRect basketTopFrame = basketTop.frame;
basketTopFrame.origin.x = 0;
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ basketTop.frame = basketTopFrame; } completion:^(BOOL finished){ 
}];

//left to right animation
CGRect napkinBottomFrame = basketTop.frame;
napkinBottomFrame.origin.x = 320;
[UIView animateWithDuration:0.3 delay:0.0 options: UIViewAnimationOptionCurveEaseOut animations:^{ basketTop.frame = napkinBottomFrame; } completion:^(BOOL finished) 
{
    /*done*/
}];

basketTop 是您的 uiview 的对象

于 2013-05-14T06:15:27.583 回答
0

可靠地实现同步运动的唯一方法是不使用动作和 ui 动画。他们只是工作太不同了。

而是以计划的更新方法手动更新图层和视图位置。检查移动操作代码,了解如何确保在给定时间内到达某个位置。

于 2013-05-14T10:39:02.363 回答