当我向右滑动时,我有一个想要向右移动的图像。 这是代码的主要部分!

-(void)viewDidLoad {
    UISwipeGestureRecognizer *swipeRIGHT = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipedRight)];
    swipeRIGHT.numberOfTouchesRequired = 1;
    swipeRIGHT.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:swipeRIGHT];

}

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

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

它适用于所有其他方向。 但是这个代码的正确方向部分只有在我向我扫描不是我想要的图像时才有效。

任何帮助都非常感谢我完全陷入困境

===============>>#1 票数:2

几点意见:

  1. 滑动手势是一种离散手势,仅在您移动所需距离时才会被识别,并且会导致对action选择器的单次调用。 因此,如果图像足够小,则所需的距离可能使得手指不再在识别手势之前移动的图像视图上方。

    您可能需要考虑使用连续手势,例如UIPanGestureRecognizer ,而不是离散手势。 这样,您可以在用户的​​手指在屏幕上移动图像的同时拖动图像。 它产生了响应更快的UI。 所以你可以这样:

     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; [viewToAnimate addGestureRecognizer:pan]; 

     - (void)handlePan:(UIPanGestureRecognizer *)gesture { static CGPoint originalCenter; if (gesture.state == UIGestureRecognizerStateBegan) { originalCenter = gesture.view.center; } else if (gesture.state == UIGestureRecognizerStateChanged) { CGPoint translate = [gesture translationInView:gesture.view]; gesture.view.center = CGPointMake(originalCenter.x + translate.x, originalCenter.y + translate.y); // or, if only moving horizontally, use CGPointMake(originalCenter.x + translate.x, originalCenter.y) } else if (gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerStateCancelled) { // do whatever you want here when the user lets go, eg animate the rest of the way to some location [UIView animateWithDuration:0.5 animations:^{ gesture.view.center = ... // perhaps animate to some new location }]; } } 

    唯一的问题是当他们放手时你想做什么。 你可能想把它放在他们放手的地方。 或者您可能希望得出结论,他们已经移动得足够远,以便在他们放手时将其设置为某个新目的地,或者如果他们没有将其移动得足够远,则将其移回原始位置。 这一切都取决于你想要的用户体验。

  2. 您正在使用计时器制作动画,但如果您想在用户放手后进行一些“完成”动画,则使用animateWithDuration会更容易,例如:

     [UIView animateWithDuration:0.5 animations:^{ viewToAnimate.frame = ... // set the destination of where you want it to animate to }]; 

    也许:

     [UIView animateWithDuration:0.5 animations:^{ viewToAnimate.frame = ... // set the destination of where you want it to animate to } completion:^(BOOL finished) { // do here whatever you want to do when the animation is done }]; 

不幸的是,这里的细节会因您想要的UX而有很大不同。 例如,如果您将手指向中间拖动一半,是否要将其拖动到中途并停止,或者在剩下的路线上设置动画,或者返回。

同样地,你暗示还有其他手势:那么你想要的互动是什么? 假设用户开始向右拖动并且手指仍然向下,停止并开始向左移动。 如果您想要这种行为,您可能需要为所有四个方向单个平移手势。 如果您想要单独的手势,那么您可能想要深入研究子类手势识别器的世界。 这一切都取决于你需要什么。

但简短的回答是,如果您希望手势能够更快地导致UI更改,您可能必须从简单的离散手势(如滑动手势)升级到更复杂的连续手势识别器(例如平移手势或您自己的手势)自定义手势子类)。

有关更多信息,请参阅iOS事件处理指南中的“ 手势识别器”部分 或者也许看WWDC 2012视频构建高级手势识别器

  ask by Gray translate from so

未解决问题?本站智能推荐: