それぞれ50x50ピクセルサイズの画像が約50枚あります。ユーザーにそのうちの1つを選んでもらいたい。そこで最初にUITableViewについて考えましたが、それは正しくありません。それは多くの画面スペースを浪費します。すべての画像を上下に並べるよりも、たとえば6列とn行のグリッドを表示する方がよいでしょう。
UIScrollViewを使用して、グリッドのように表示されるように自動的に配置するUIViewオブジェクトで埋めます。それは行く方法ですか?または他の提案はありますか?
それぞれ50x50ピクセルサイズの画像が約50枚あります。ユーザーにそのうちの1つを選んでもらいたい。そこで最初にUITableViewについて考えましたが、それは正しくありません。それは多くの画面スペースを浪費します。すべての画像を上下に並べるよりも、たとえば6列とn行のグリッドを表示する方がよいでしょう。
UIScrollViewを使用して、グリッドのように表示されるように自動的に配置するUIViewオブジェクトで埋めます。それは行く方法ですか?または他の提案はありますか?
私は自分のアプリで非常によく似た何かをしています。下に画像があり、上に別のサブビューがあり、すべて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]
three20ライブラリには、これを行うクラスがあります。
あなたが示唆するように、テーブルビューは必ずしも行ごとに1つの画像を表示することを意味するわけではありません。テーブルセルはカスタマイズでき、6つの50x50UIImageViewを持つセルサブクラスは非常に単純です。スクロールビューよりも柔軟性が低いかもしれませんが、1行あたり6つの画像が目標である場合は、テーブルビューが最も簡単な方法です。
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)をチェックしてください。