0

私はscrollView280(w) x 350(h) とcontent view840(w) x 405(h) を持っています。

segmented control次のようにビューを切り替えます。

- (IBAction)segmentedClicked:(UISegmentedControl *)sender
{
    CGFloat x = sender.selectedSegmentIndex * self.personalDetailsScrollView.frame.size.width;
    CGPoint point = CGPointMake(x, 0);
    [self.personalDetailsScrollView setContentOffset:point animated:YES];
}

通常の水平スクロールを無効にして、セグメント化されたボタンのみがビューを水平にスクロールするようにします。垂直スクロールはアクティブのままにする必要があります。

-(void)scrollViewDidScrollとここで提供されるソリューションを使用しようとしました: ( iOS で scrollView の水平スクロールをロックする方法) しかし、何らかの理由でうまくいきませんでした。

4

4 に答える 4

1

私はそれを試していませんが、これは私が取るアプローチです:

UIScrollViewは、次のプロパティがあります。

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer

だから私は自分の新しいUIPanGestureRecognizer拡張機能を作成してオーバーライドします:

- (CGPoint)translationInView:(UIView *)view
{
    CGPoint tmp = [super translationInView:view];
    return CGPointMake(0, tmp.y);
}

そのジェスチャレコグナイザーをに追加してから、次のscrollviewように呼び出します。

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:youCustomOne];

動作するはずです。

于 2013-02-15T13:02:27.777 に答える
0

これを試して

- (IBAction)segmentedClicked:(UISegmentedControl *)sender
{
    if(sender.selectedSegmentIndex == 0)
    {
       CGPoint point = CGPointMake(0, 0);
    }
    else
    {
       CGPoint point = CGPointMake(self.personalDetailsScrollView.frame.size.width, 0);
     }
    [self.personalDetailsScrollView setContentOffset:point animated:YES];
    }
于 2013-02-15T13:07:00.580 に答える
0

これが遅い答えであることは知っていますが、まだ受け入れられた答えがないので、試してみます。

あなたがやろうとしているのは、1つのコントローラーを使用して3つの別々の画面を効果的に保持しているようです。ユーザーが で選択した内容に応じて画面を切り替えようとしていますが、UISegmentedControlユーザーが水平方向にスワイプするだけでビュー間をパンできるようにしたくありません。3 つの異なるビュー コントローラーを使用しないのはなぜですか? これは、あなたがやろうとしていることをセットアップするためのより期待される方法だと思います。したがって、実装がはるかに簡単になります。

于 2013-10-10T16:36:48.223 に答える