2

私はあなたが簡単だと思うかもしれないいくつかの質問を理解するのに苦労していますUIScrollView.

  1. contentSizeの境界ではなく、なぜ を増やすのUIScrollViewですか? 実際、私は境界と何をするのか理解していませcontentSizeん。

  2. YESに設定pagingEnabledすると、scrollView はスクロールを停止する場所をどのように認識しますか?

  3. のページ間にギャップを追加したいUIScrollView。( pagingEnabled = YES) インターネットで検索したところ、rob mayoff が書いた次のコードが見つかりました。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];

    #define kGutterWidth 20

    UIScrollView *scrollView = self.scrollView;
    CGRect scrollViewFrame = scrollView.frame;
    scrollViewFrame.size.width += kGutterWidth;
    scrollView.frame = scrollViewFrame;

    CGSize scrollViewSize = scrollView.bounds.size;

    for (int i = 0; i < colors.count; i++) {
        CGRect frame = CGRectMake(scrollViewSize.width * i, 0,
            scrollViewSize.width - kGutterWidth, scrollViewSize.height);
        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [scrollView addSubview:subview];
        [subview release];
    }

    scrollView.contentSize = CGSizeMake(
        colors.count * scrollViewSize.width,
        scrollViewSize.height);
}

コードのソース: ビュー間にスペースがあるページング scrollView を作成する方法

このコードは正常に動作しますが、理解していない限り問題ありません。

  1. 最終的にページが元のサイズで読み込まれることはわかっていますが、各ページが kGutterWidth で減算されるため、どのように起こるのかわかりません。

  2. rob が kGutterWidth で scrollView のフレームを増やしたのはなぜですか?

  3. OK、この質問はばかげているように聞こえるかもしれませんが、私は本当に理解できません。コードでは、Rob が という名前の新しい scrollView オブジェクトを作成しましたscrollView。その値は値に等しいself.scrollViewです。scrollViewへの変更が にどのように影響するかわかりませんself.scrollView。それらは異なるオブジェクトだからです。それらのメモリアドレスは異なります。

私は長い間、これらの質問を理解するのに苦労しています。今日はここに書くことにしました。

ありがとうございました。

4

2 に答える 2

5

bounds1- のプロパティの実際の説明を確認できますUView

独自の座標系でのビューの位置とサイズを表す境界の四角形。

そして実際contentSize

The size of the content view.

1 つ目は、 の実際のサイズに関連していUIViewます ( はframeに関連していますsuperView)。2 番目は に関連しておりcontentSizecontentSizeその より大きいframeはスクロール機能を提供します。

2-ドキュメントから:

このプロパティの値が YES の場合、ユーザーがスクロールすると、スクロール ビューはスクロール ビューの境界の倍数で停止します。デフォルト値は NO です。

UIScrollViewあなたとそののサイズ(幅)に基づいて計算されると思いますcontentSize。たとえばcontentSize UIScrollView、320p フレームの 640p には 2 つの「ページ」があります。(640/320 = 2)。

UIView3- ギャップは、実際のページよりも小さい各ページの「内側」に配置することによって作成されます。これは、基本的にロブがここで行うことです:

  CGRect frame = CGRectMake(scrollViewSize.width * i, 0,
            scrollViewSize.width - kGutterWidth, scrollViewSize.height);

したがってUIScroll、次のフレーム(0.0f,0.0f,320.0f,480.0f)contentSizeofを使用すると、次のように(1280.0f,480.0f)なります。

1 番目のアイテムのフレーム =>(0.0f,0.0f,300.0f,480.0f)

2 番目のアイテムのフレーム =>(320.0f,0.0f,300.0f,480.f)

3番目のアイテムのフレーム =>(640.0f,0.0f,300.0f,480.0f)

4番目のアイテムのフレーム=> (960.0f,0.0f,300.0f,480.0f)


編集 1.0:

私はそれをまったく理解していません。「実際のページよりも小さい各ページ内にビューを配置する」とはどういう意味ですか?

では、私が使用した例を見てみましょう: つまり、現在 4 つの「ページ」があります。実際、あなたが持っているのは基本的にUIScrollView3 回分割されたものであり、ページと呼ぶことができる 4 つの異なる場所が得られます。各「ページ」内には、各ページ間に「スペース」の感覚を与えるためにUIView、実際のページよりも小さいサイズを配置します。

編集 2.0:

多分もっと視覚的なものがあなたを助けるでしょう:

ここに画像の説明を入力

編集 3.0:

ページングの仕組みを理解すれば簡単です... 320px + 20px = 340px で、iPhone の画面サイズの 320px よりも大きくなっています。UIViewに追加されたそれぞれUIScrollViewは 340-20 = 320px であるため、340px のサイズの「ページ」が作成されます。したがって、340*3 (の数UIViews) で 1020px が得られ、最終的には基本的に 3 つの UIViews + 3 つのスペースになります。

于 2013-03-19T13:11:55.517 に答える
0
  1. 境界は、ビューの実際のコンテナーです。contentSize は「表示可能な」サイズです。例: 100 ピクセルの高さのテーブルですが、セルには 20 ピクセルの多数のセルが含まれています。合計サイズは ≈ 240 px です。これは contentSize ですが、境界の高さは 100 px です。
于 2013-03-19T13:01:35.743 に答える