允许在iOS上使用Charts垂直滚动UIScrollView

时间:2018-03-17 20:11:40

标签: ios objective-c uiscrollview uigesturerecognizer ios-charts

我在LineChartView内的Charts框架中有一个UIScrollView。可以通过平移来突出显示图表上的值,以查看有关特定数据点的更多详细信息。

这些是我在视图控制器中进行平移的整体行为的目标:

  1. 如果用户在视图控制器上平移任何位置,滚动视图应滚动。即使在图表视图中,也可以指明方向是垂直的。
  2. 图表应仅在用户水平滚动时突出显示值,并且滚动视图在这种情况下不应作出反应。
  3. 目前,滚动视图在完全与图表交互时会忽略滚动,而图表会对垂直平移作出反应,而不应该这样做,所以当我接近解决方案时,它并不完全存在。

    这是我目前的实施......

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSArray<UIGestureRecognizer *> *gestureRecognizers = self.lineChartView.gestureRecognizers;
        for (UIGestureRecognizer *gestureRecognizer in gestureRecognizers) {
            if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
                gestureRecognizer.delegate = self;
                self.lineChartViewPanGestureRecognizer = (UIPanGestureRecognizer *)gestureRecognizer;
            }
        }
    
        UIPanGestureRecognizer *lineChartViewPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleLineChartViewPanGestureRecognizer:)];
        [self.lineChartView addGestureRecognizer:lineChartViewPanGestureRecognizer];
    }
    
    - (void)handleLineChartViewPanGestureRecognizer:(UIPanGestureRecognizer*)sender {
        if (sender.state == UIGestureRecognizerStateEnded) {
            [self.lineChartView highlightValues:NULL];
        }
    }
    
    #pragma mark - UIGestureRecognizerDelegate
    
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        if (gestureRecognizer == self.lineChartViewPanGestureRecognizer && otherGestureRecognizer == self.scrollView.panGestureRecognizer) {
            UIPanGestureRecognizer* panGestureRecognizer = (UIPanGestureRecognizer *)otherGestureRecognizer;
            CGPoint velocity = [panGestureRecognizer velocityInView:self.view];
            return fabs(velocity.y) > fabs(velocity.x);
        }
    
        return YES;
    }
    

    当用户在图表上垂直平移时,任何人都有关于如何保持滚动视图滚动的建议(这应该忽略这样的平移)?

0 个答案:

没有答案