【问题标题】:How Can I Trigger a Segue From Pan Gesture?如何从 Pan Gesture 触发 Segue?
【发布时间】:2014-11-29 10:10:27
【问题描述】:

我在 StoryBoard 的 UIViewController 上设置了以下平移手势代码。

在 ViewDidLoad 中:

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:)];
[self.view addGestureRecognizer:panRecognizer];

然后我有以下调用:

#pragma mark - GESTURE RECOGNIZERS

- (void)panDetected:(UIPanGestureRecognizer *)panRecognizer
{
CGPoint velocity = [panRecognizer velocityInView:self.view];

NSLog(@"Pan Detected.");

if(velocity.x > 0)
{
    NSLog(@"Pan went right.");
}
else
{
    NSLog(@"Pan went left.");

    if (panRecognizer.state == UIGestureRecognizerStateChanged)
        NSLog(@"State Changed.");
}
}

当我从左向右拖动手指时,上面的代码会触发。我希望它仅在我从屏幕右边缘拖动时触发。然后我想继续使用另一个 StoryBoard 上的 UIViewController。 (我想从右边缘模态地将设置屏幕拖到应用程序的主屏幕上)。 UIViewController 的设置只需要部分拖到屏幕上。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSLog(@"prepareForSegue: %@", segue.identifier);
if([segue.identifier isEqualToString:@"Settings"])
{
    NSLog(@"Show Settings View Controller");
    OLStoryboardLink *storyboardLink = segue.destinationViewController;
    //send the string
    storyboardLink.setStoryboardName = @"Settings";
    storyboardLink.transitioningDelegate  = self;
    [self presentViewController:storyboardLink animated:YES completion:nil];
}
}

如何从屏幕右边缘触发平移手势的 segue?

【问题讨论】:

    标签: ios uiviewcontroller uistoryboardsegue uipangesturerecognizer


    【解决方案1】:

    如果有人还在看,这里是 Swift 5 的答案 -

    @objc func panDetected(panGesture: UIPanGestureRecognizer) {
        let velocity = panGesture.velocity(in: self.view)
    
        print("Pan Detected.");
    
        if (velocity.x > 0)
        {
            print("Pan went right.");
        }
        else
        {
            print("Pan went left.");
    
            if panGesture.state == .changed {
                print("State Changed.");
            }
            performSegue(withIdentifier: "NowPlayingSegue", sender: self)
        }
    }
    

    【讨论】:

      【解决方案2】:

      无法从情节提要 A 中的视图控制器到情节提要 B 中的视图控制器执行转场。要使用转场,两个视图控制器必须在同一个情节提要中。

      但是要回答这个问题,您可以通过调用performSegueWithIdentifier: 方法来触发转场:

      - (void)panDetected:(UIPanGestureRecognizer *)panRecognizer
      {
          CGPoint velocity = [panRecognizer velocityInView:self.view];
      
          NSLog(@"Pan Detected.");
      
          if (velocity.x > 0)
          {
              NSLog(@"Pan went right.");
          }
          else
          {
              NSLog(@"Pan went left.");     
      
              if (panRecognizer.state == UIGestureRecognizerStateChanged)
                  NSLog(@"State Changed.");
      
              [self performSegueWithIdentifier:@"Settings" sender:panRecognizer];
          }
      }
      

      欲了解更多信息,请参阅Apple's reference

      【讨论】:

      • 我目前正在使用 RSStoryboardLink 执行此操作,但我不知道如何通过手势触发它。我可以通过 UIButton 轻按来使其工作。
      • 你有更完整的代码示例吗?如何从我的 panDetected 代码中执行SegueWithIdentifier?
      • 你知道如何处理我的问题中的其他部分 -> 将面板/uiview 从右边缘拖到视图中吗?类似于控制中心面板从底部向上拖动或通知区域向下拖动。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多