所以我试图为图像创建一个固定的运动,但我似乎无法使其正常工作。第一个块由计时器激活,但我不知道如何关闭它并激活另一个计时器以继续曲线。
BMR = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(BallArchR) userInfo:nil repeats:YES];
LMR = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(BallArchL) userInfo:nil repeats:YES];
-(void)BallArchR{
if (Ball.center.x < 284){
Ball.center = CGPointMake(Ball.center.x + 2.72 , Ball.center.y - 2 );
}
if (Ball.center.x >= 284 && Ball.center.x < 488) {
Ball.center = CGPointMake(Ball.center.x + 2.72 , Ball.center.y + 2 );
}
}
-(void)BallArchL{
if (Ball.center.x > 284){
Ball.center = CGPointMake(Ball.center.x - 50 , Ball.center.y - 50 );
}
if (Ball.center.x <= 284 && Ball.center.x > 80) {
Ball.center = CGPointMake(Ball.center.x - 2.72 , Ball.center.y + 2 );
}
}
这是使球在曲线中移动的代码,并且在游戏启动时激活BallArchR。但我无法将其关闭并激活BallArchL。有没有其他方法可以使这项工作?
答案 0 :(得分:1)
- (void)stopTimer
{
if ([_LMR isValid])
{
[_LMR invalidate];
}
}
您可以将此用作停止计时器。
另外,对于动画,您可以使用
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
//move your view
[UIView commitAnimations];
或
[UIView animateWithDuration:duration
animations:^{
//move your view
}
];
答案 1 :(得分:1)
我认为一个计时器就足够了
BMR = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(BallArchR) userInfo:nil repeats:YES];
-(void)BallArchR
{
if (Ball.center.x < 284)
{
Ball.center = CGPointMake(Ball.center.x + 2.72 , Ball.center.y - 2 );
}
if (Ball.center.x >= 284 && Ball.center.x < 488)
{
Ball.center = CGPointMake(Ball.center.x + 2.72 , Ball.center.y + 2 );
}
else
{
[self BallArchL ];
}
}
-(void)BallArchL
{
if (Ball.center.x > 284)
{
Ball.center = CGPointMake(Ball.center.x - 50 , Ball.center.y - 50 );
}
if (Ball.center.x <= 284 && Ball.center.x > 80)
{
Ball.center = CGPointMake(Ball.center.x - 2.72 , Ball.center.y + 2 );
}
else
{
[BMR invalidate];
}
}
我根据我的理解回答了这个问题,如果不是你想要的话,请在这里明确说明你的要求......;)
答案 2 :(得分:1)
当您需要停用计时器时,首先检查计时器是否有效,然后使用“invalidate”方法停用。
if ([BMR isValid])
{
[BMR invalidate];
}