0

以下を実装する方法を探しています。

  • 上部にフルスクリーン UIView とこの下にフルスクリーン UIScrollView の両方を含む 1 つの「マスター」scrollView を用意します。
  • ユーザーが上部の UIView を超えてスクロールすると、下部の scrollView が表示され、スクロール イベントのレスポンダーになります。
  • ユーザーが一番下の UIScrollView から上にスクロールしようとすると、タッチがリダイレクトされるため、「マスター」scrollView が制御され、UIView が再び表示されます。

これがどのように設定されているかを理解するために、現在の実装を次に示します。

// Initialise components:

    mainScreen = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = mainScreen.size.height-20;

    // Scroll View Controller

    _scrollControl = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, screenHeight)];
    _scrollControl.contentSize = CGSizeMake(320, 2*screenHeight); // Twice as big as the screen size for both views to fit
    _scrollControl.backgroundColor = [UIColor clearColor];
    _scrollControl.delegate = self;

    // Top View

    _topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, screenHeight)];
    _topView.backgroundColor = [UIColor redColor];

    [_scrollControl addSubview:_topView];

    // Bottom View
    _bottomView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, screenHeight, 320, screenHeight)];
    _bottomView.backgroundColor = [UIColor yellowColor];
    _bottomView.contentSize = CGSizeMake(320, 2*screenHeight);

    _bottomView.delegate = self;

    UILabel *imageLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 700)];
    imageLabel.backgroundColor = [UIColor greenColor];

    [_bottomView addSubview:imageLabel];

    [_scrollControl addSubview:_bottomView];

    // Add to main view
    [self.view addSubview:_scrollControl];

デリゲート メソッドを使用して目的の効果を達成しようとしましたが、下部の scrollView に切り替わる前に「マスター」scrollView のスクロールを停止できないようです。

4

2 に答える 2

0

Apple はこの機能を無料で提供しているので、ここで実際に何かを直接コーディングする必要はありません (少し変わったものが必要でない限り)。効果はページングによって達成されます

scrollView.pagingEnabled = YES;

これが実際に効果を発揮する前に、サブビュー (UIView と UIScrollView の両方) をマスター スクロール ビューに埋め込む必要があります。それぞれが同じサイズ、または 1 ページのサイズである必要があります。マスター スクロール ビューが 100、100 ポイントだとすると、次のように設定できます。

CGRect pageRect = CGRectMake(0, 0, 100, 100);
NSInteger pageCount = 2;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:pageRect];
scrollView.pagingEnabled = YES;

UIView *page1View = [[UIView alloc] initWithFrame:pageRect];
page1View.backgroundColor = [UIColor redColor];
[scrollView addSubview:page1View];
pageRect.origin.x += pageRect.size.width;

UIView *page2View = [[UIView alloc] initWithFrame:pageRect];
page2View.backgroundColor = [UIColor blueColor];
[scrollView addSubview:page2View];

scrollView.contentSize = CGSizeMake(pageRect.size.width * pageCount, 
                                    pageRect.size.height);

それはあなたに基本を与えるはずです。ご覧のとおり、この例では、サブビューを次々と水平に配置しています。両方のサブビューをカバーするようにコンテンツ サイズを設定し、ページングを有効にします。UIScrollView が残りを処理する必要があります。

WWDC セッション ビュー、特に WWDC 2010 のセッション 104 - スクロール ビューを使用したアプリの設計を参照してください。これには、スクロール ビューをセットアップし、それらを最大限に活用する方法に関する多くの情報があります。

お役に立てれば!

于 2013-06-07T09:01:07.520 に答える
0

したがって、swift を使用して検出する場合は、次を使用します。

override func scrollViewDidScroll(scrollView: UIScrollView) {

    if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
        //reach bottom
    }

    if (scrollView.contentOffset.y < 0){
        //reach top
    }

    if (scrollView.contentOffset.y >= 0 && scrollView.contentOffset.y < (scrollView.contentSize.height - scrollView.frame.size.height)){
        //not top and not bottom
    }
}
于 2014-10-01T13:27:12.243 に答える