在UIView之间滑动手势

时间:2013-05-11 13:28:12

标签: ios uiview

我有一个ViewController类,我在self.view上有一个名为templateView的UIView,它由一个名为gridView的UIView组成,我需要在templateView上滑动,我添加了swipegesture,

swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction)];
swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction)];

swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
swipeRight.delegate = self;

swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
swipeLeft.delegate = self;

 [templateView addGestureRecognizer:swipeRight];
 [templateView addGestureRecognizer:swipeLeft];

swipeRightswipeLeft我需要移动gridView左侧和右侧..我需要在这些方法中实现什么??

2 个答案:

答案 0 :(得分:7)

我建议

  1. 使用带参数的手势处理程序(如果您曾向多个视图添加手势);

  2. 确保相关视图已启用userInteractionEnabled

  3. 除非您正在实施其中一种UIGestureRecognizerDelegate方法,否则无需设置手势delegate

  4. 因此,配置可能如下所示:

    templateView.userInteractionEnabled = YES;
    
    swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
    [templateView addGestureRecognizer:swipeRight];
    
    swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    [templateView addGestureRecognizer:swipeLeft];
    

    然后手势处理程序可能如下所示:

    - (void)handleSwipe:(UISwipeGestureRecognizer *)gesture
    {
        CGRect frame = self.gridView.frame;
    
        // I don't know how far you want to move the grid view.
        // This moves it off screen.
        // Adjust this to move it the appropriate amount for your desired UI
    
        if (gesture.direction == UISwipeGestureRecognizerDirectionRight)
            frame.origin.x += self.view.bounds.size.width;
        else if (gesture.direction == UISwipeGestureRecognizerDirectionLeft)
            frame.origin.x -= self.view.bounds.size.width;
        else
            NSLog(@"Unrecognized swipe direction");
    
        // Now animate the changing of the frame
    
        [UIView animateWithDuration:0.5
                         animations:^{
                             self.gridView.frame = frame;
                         }];
    }
    

    注意,如果您正在使用自动布局,并且如果视图是由约束而不是translatesAutoresizingMaskIntoConstraints定义的,则此处理程序代码必须适当更改。但希望这能为您提供基本的想法。

答案 1 :(得分:1)

您可以使用一些UIViewAnimations移动gridView。 创建类似的东西:

-(void)swipeRightAction{
    [UIView setAnimationDuration:1];
    gridView.frame = CGRectMake(320,0);
    [UIView commitAnimations];
}

此代码将更改gridView的框架。您需要根据要滑动视图的位置更改此参数。 我没有尝试代码,请告诉我它是否有效。