1

iPhone では、3 つの異なる方法で異なるホーム画面を切り替えることができます。

  1. 左または右にスワイプすると、それぞれ次の画面がアニメーション化されます。

  2. 画面に触れて、指を離さずに画面を左右にドラッグします。臨界点 (画面が半分以上離れた距離) を通過した後、指を離すと次のホーム画面がアニメーション表示されます。

  3. 画面に触れ、指を離さずに画面を少しドラッグします。必要に応じてドラッグを停止できますが、指を離すことはできません。また、比較的短い距離で左または右に加速することができ、左または右のそれぞれの画面にアニメーション化されます。

ポイント 1 と 2 を相互に排他的に見ると、それらを実装するのは簡単であることがわかります。それUISwipeGuestureRecognizerはポイント 1. と 2. のためだけUIPanGuestureRecognizerです。

1 と 2 を組み合わせることは、スワイプが支配的であるように見えるので、それほど自明ではないように思えます (私はそれらを と組み合わせようとしました- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer)。パンをトリガーするには、画面に指を置き、スワイプをトリガーしないように非常にソフトにドラッグする必要がありました。

追加としてポイント3については言うまでもありません。これは、私の知識の状態では完全に順不同のようです。

この辺で何かアドバイスはありますか?事前にどうもありがとうございました。この質問を解決するためにさらに情報が必要な場合は、喜んでお届けします.

4

2 に答える 2

4

ホーム画面はUIScrollView簡単UIPageControl です:)

例 :

// MyViewController.h
@interface MyViewController : UIViewController <UIScrollViewDelegate> {
    UIScrollView *_scrollView;
    UIPageControl *_pageControl;
}

// MyViewController.m
// in your viewDidLoad method
int numberOfPages = 3;
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,
                                                                 self.view.frame.size.height)];
 [_scrollView setContentSize:CGSizeMake(numberOfPages*_scrollView.frame.size.width, _scrollView.frame.size.height)];
 [_scrollView setPagingEnabled:YES];
 [_scrollView setShowsHorizontalScrollIndicator:NO];
 [_scrollView setDelegate:self];
 [self.view addSubview:_scrollView];

 _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, _scrollView.frame.size.height-30, _scrollView.frame.size.width, 20)];
 [_pageControl setNumberOfPages:numberOfPages];
 [_pageControl setCurrentPage:0];
 [self.view addSubview:_pageControl];

for (int i=0; i<numberOfPages; i++) {
   CGRect frame = _scrollView.frame;
   frame.origin.x = frame.size.width * i;
   frame.origin.y = 0;
   UIView *view = [UIView alloc] initWithFrame:frame];
   //Setup your view     
   [_scrollView addSubview:view];
}

現在表示されているビューに関して特定のメソッドを実行する場合は、scrollViewDidScroll:メソッドを使用します (たとえば、データベースからコンテンツをロードする)。

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    CGFloat pageWidth = _scrollView.frame.size.width;
    int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    _pageControl.currentPage = page;

    //do whatever you want..
}

これは、どのように行うことができるかを示すための単なる例です。データベースを使用している場合、または各ビューが異なる場合は、ビューをセットアップしたりデータを取得したりするために異なる手順を実行する必要がありますが、ロジックは同じです...

于 2012-10-22T16:03:28.570 に答える
1

WWDC 2012 ビデオ

  • スクロール ビューによるユーザー エクスペリエンスの向上を参照してください。

WWDC 2011 ビデオ

  • 高度なスクロール ビュー テクニックを確認してください。
于 2012-10-22T16:46:00.693 に答える