我有这个UIView包含两个相同的UIImageViews并列。 我希望这个视图从右到左翻译,当视图到达终点时,立即将其中心重置为默认值,以给出连续性的幻觉。
我的问题是,当我在非动画块中设置默认中心时,该段落是动画的,我看到我的视图“倒带”。
这是我正在使用的代码:
-(void)drunkenMove{
int newCenterX=40;
BOOL animation=YES;
CGPoint newCenter;
if(starView.center.x<=-0){ //so the view has reached the end, being 960*320
newCenter=CGPointMake(480, starView.center.y); //create a reset center
animation=NO;
}else{
newCenter=CGPointMake(starView.center.x-newCenterX, starView.center.y); //else move on
animation=YES;
}
if (animation==YES) {
[UIView beginAnimations:NULL context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:0.3f];
[UIView setAnimationBeginsFromCurrentState:YES];
starView.center=newCenter;
[UIView commitAnimations];
}else{
starView.center=newCenter; //here I want to set the center instantly
[UIView beginAnimations:NULL context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:0.3f];
[UIView setAnimationBeginsFromCurrentState:YES];
starView.center=CGPointMake(480+newCenterX, starView.center.y);;
[UIView commitAnimations];
}
}
我期待看到我的中心重置然后动画,但我也得到了重置中心的动画。 知道为什么吗? 我遇到了与其他UIView动画类似的问题所以我想我可能错过了一些东西。 顺便说一句,这个函数由循环线程调用。
感谢。
修改
我的问题以某种方式由方法
创建[UIView setAnimationBeginsFromCurrentState:YES];
从UIView类引用: 讨论 在iOS 4.0及更高版本中不鼓励使用此方法。相反,您应该使用animateWithDuration:delay:options:animations:completion:方法来指定动画和动画选项。
我希望这可以节省一些时间。
答案 0 :(得分:0)
我使用的方法几乎和你一样,对我来说它有效。也许[UIView setAnimationBeginsFromCurrentState:YES];引起你的问题,但我不确定。
答案 1 :(得分:0)
我相信你的“重置”
starView.center=newCenter;
在您创建的以下动画中,else子句中的将被CoreAnimation自动包装以提高效率。摆脱那个动画:
}else{
starView.center=newCenter; //here I want to set the center instantly
//[UIView beginAnimations:NULL context:nil];
//[UIView setAnimationCurve:UIViewAnimationCurveLinear];
//[UIView setAnimationDuration:0.3f];
//[UIView setAnimationBeginsFromCurrentState:YES];
//starView.center=CGPointMake(480+newCenterX, starView.center.y);;
//[UIView commitAnimations];
}
并且子视图将以您想要的方式“跳跃”。移动动画将在此方法的下一个循环中再次启动。