2

我有一个 ViewController 类,我templateView在 self.view 上调用了一个 UIView,它由一个名为的 UIView 组成gridView,在这里我需要滑动templateView,因为我添加了滑动手势,例如,

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];

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

4

2 回答 2

7

我建议

  1. 使用带有参数的手势处理程序(以防您将手势添加到多个视图);

  2. 确保相关视图已userInteractionEnabled打开。

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

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

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,则此处理程序代码必须适当更改。但希望这能给你基本的想法。

于 2013-05-11T14:28:24.570 回答
1

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

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

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

于 2013-05-11T13:41:07.327 回答