2

それぞれ50x50ピクセルサイズの画像が約50枚あります。ユーザーにそのうちの1つを選んでもらいたい。そこで最初にUITableViewについて考えましたが、それは正しくありません。それは多くの画面スペースを浪費します。すべての画像を上下に並べるよりも、たとえば6列とn行のグリッドを表示する方がよいでしょう。

UIScrollViewを使用して、グリッドのように表示されるように自動的に配置するUIViewオブジェクトで埋めます。それは行く方法ですか?または他の提案はありますか?

4

4 に答える 4

2

私は自分のアプリで非常によく似た何かをしています。下に画像があり、上に別のサブビューがあり、すべてUIScrollViewが所有する「線」を描画しています。次のように、画像を描画するために別のビューを用意することをお勧めします。

-(void) drawRect(CGRect rect) {
    CGRect smallerRect = CGRectMake(x, y, width, height);
    [yourImage drawRect: smallerRect];
    // repeat as needed to draw the grid
 }

別のポスターは、ビューがUIScrollViewによって所有されている場合、タッチイベントを取得できないと述べています。これは単に真実ではありません。私はそれを機能させています。ただし、次のように設定する必要がある場合があります。

[yourScrollView setUserInteractionEnabled: YES]
[yourGridView setUserInteractionEnabled: YES]
于 2009-05-04T21:29:08.087 に答える
1

three20ライブラリには、これを行うクラスがあります。

于 2009-05-04T16:30:40.190 に答える
1

あなたが示唆するように、テーブルビューは必ずしも行ごとに1つの画像を表示することを意味するわけではありません。テーブルセルはカスタマイズでき、6つの50x50UIImageViewを持つセルサブクラスは非常に単純です。スクロールビューよりも柔軟性が低いかもしれませんが、1行あたり6つの画像が目標である場合は、テーブルビューが最も簡単な方法です。

于 2009-05-04T21:13:04.350 に答える
1

three20はひどいです、私はそれを使用しました、私はそれをお勧めしません...グリッドを表示するのは簡単です...

    - (void) reloadGridView
    {

        scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(5, 54, scrollViewWidth, scrollViewHeight8)];
        scrollView.delegate = self;
        scrollView.showsVerticalScrollIndicator = NO;
        scrollView.showsVerticalScrollIndicator = NO;
        scrollView.userInteractionEnabled = YES;
        scrollView.scrollEnabled = YES;

        [self.view addSubview:scrollView];


        int x = 10;
        int y = 10;

        divisor = 1;

        for (int i = 0; i < [self.photosArray count]; i++) {

            int buttonTag = divisor;

            UIImage *thumb = [UIImage imageWithContentsOfFile:[self thumbPathAtIndex:i]];
            //********* CREATE A BUTTON HERE **********
            //********* use the thumb as its backgroundImage *******


            if(divisor%4==0){
                y+=70; 
                x = 10;

            }else{
               x += 70;
            }

            divisor++;
        }
        [scrollView setContentSize:CGSizeMake(scrollViewWidth, ([self.photosArray count]%4 == 0) ? y : y+100)];

}

横向きで6つの画像が必要な場合は、isLandscapeのBOOLを設定します

if (isLandscape) {
    //change the divisor to change @ 6 instead of 4
}

より高度なgridViewが必要な場合は、AQGridView(Google it)をチェックしてください。

于 2011-04-28T18:51:10.167 に答える