【问题标题】:Image movement in With Gesture Recognizer使用手势识别器中的图像移动
【发布时间】:2014-04-20 11:27:29
【问题描述】:

我的main.storyboard 中有 1 个视图控制器,其中有一个 UIImageView,它链接到 滑动手势识别器

我的目标是让用户向左滑动并且图像连续向左移动,然后如果用户向右/向上/向下滑动它将停止向左移动并朝新方向移动。 p>

到目前为止,我已经尝试过使用这种方法,但效果不佳:

-(void)screenWasSwipedDown
{
    BackMovement = [NSTimer scheduledTimerWithTimeInterval:0.0035 target:self selector:@selector(BackMovingDown) userInfo:nil repeats:YES];       
}

-(void)BackMovingDown
{    
    Back.center = CGPointMake(Back.center.x, Back.center.y+1);
}

我已经为每个方向都这样做了,它确实有效,但是当用户滑动新方向时,它并没有停止移动(在这种情况下是向下),只是将计时器堆叠在一起。所以向左滑动两次可以让它走得更快,或者向左和向上让它变成对角线。

如果有人知道怎么做,请帮帮我

【问题讨论】:

  • 您需要停止NSTimer(请参阅invalidate 等)请以小写开头命名您的方法和变量。
  • @Larme 谢谢我会尝试,停止 NSTimer 的最佳方法是什么?我在猜测 if 语句,但这会采取什么形式?

标签: ios objective-c uigesturerecognizer


【解决方案1】:

您可以使用[backMovement invalidate]; 使您的计时器无效,使您的计时器成为一个弱实例变量,一旦您无效它就会变为nil。

这样,您可以让刷卡代码使计时器失效并创建一个新计时器。 您不需要为每个方向创建单独的计时器,因为一次只会运行一个。只需创建一个运动计时器

-(void)screenWasSwipedDown
{
  [movementTimer invalidate]; //Also causes the timer to become nil
  movementTimer = [NSTimer scheduledTimerWithTimeInterval:0.0035 
    target:self 
    selector:@selector(BackMovingDown) 
    userInfo:nil 
    repeats:YES];       
}

请注意,使用计时器制作动画并不是最好的方法。最好使用 UIView 动画,并使用 UIViewAnimationOptionBeginFromCurrentState 选项,以便新动画从上一个动画的位置继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多