UIGestureRecognizer拖动的UIView(UIGestureRecognizer t

2019-07-05 07:44发布

我试图建立一个GestureRecognizer拖动UIView从右到左。 如果用户拖动查看屏幕的一半,视图将被自动拖入左上角放弃它,但如果用户不拖长达半个屏幕将返回到屏幕的右角。 这里有点失落,任何教程什么的? 谢谢

编辑:下面有一些代码,它是一个UIImageView ,一个里面UIScrollView ,我需要拖动整个滚动或只图像里面:

_myScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, self.window.bounds.size.height)]; [_myScroll setContentSize:CGSizeMake(self.window.bounds.size.width , 1300)];

_tutorial = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 1300)]; [_tutorial setImage:[UIImage imageNamed:@"Default"]];
_tutorial.contentMode = UIViewContentModeScaleAspectFit; [_myScroll addSubview:_tutorial];

_tutorial.userInteractionEnabled = YES;
    UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc]initWithTarget:_tutorial action:@selector(handlePan:)]; 
 [_tutorial addGestureRecognizer:recognizer];

    [self.window addSubview:_myScroll];

和方法我尝试拖动UIImageView

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

    CGPoint translation = [recognizer translationInView:_myScroll];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll];

}

Answer 1:

看看在这里 。 这是一个UIGestureRecognizer教程,这将给你的基础知识处理捏和平移手势。 一旦你学会的基础知识,这是很容易做到你想要什么。 所有你需要的是检查视图的位置,一旦锅完成将其发送到正确的位置。 看看这个其他教程上UIScrollViews ,它可以帮助您找到通过的第二部分你的方式。

这两个教程来自raywenderlich.com ,可能是最有用的iOS教程网站,我知道了。


这里是你的一些代码handlePan:方法,你可以工作:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

    CGPoint translation = [recognizer translationInView:_myScroll];

    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);

    if (recognizer.state == UIGestureRecognizerStateEnded) {

        // Check here for the position of the view when the user stops touching the screen

        // Set "CGFloat finalX" and "CGFloat finalY", depending on the last position of the touch

        // Use this to animate the position of your view to where you want
        [UIView animateWithDuration: aDuration
                              delay: 0 
                            options: UIViewAnimationOptionCurveEaseOut 
                         animations:^{
            CGPoint finalPoint = CGPointMake(finalX, finalY);
            recognizer.view.center = finalPoint; } 
                         completion:nil];
    }


    [recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll];

}

我不会在这里给你完美的答案,你就必须对代码工作,以找到一种方法,让你想让它发挥作用。

这是最后一个提示。 您可以通过使用slideFactor做一些“平滑”的动画。 这将帮助你的动画更加“现实”。 在此代码的工作,你就在“如果”的开头添加:

CGPoint velocity = [recognizer velocityInView:self.view];
CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
CGFloat slideMult = magnitude / 200;

float slideFactor = 0.1 * slideMult; // Increase for more slide

然后在UIView的animateWithDuration:使用slideFactor的持续时间。



文章来源: UIGestureRecognizer to Drag UIView