Wie würden Sie einen rollbaren Raster in Ihrem iPhone App implementieren?
-
03-07-2019 - |
Frage
Ich habe etwa 50 Bilder von 50 x 50 Pixel Größe jeder. Ich möchte der Benutzer eine von ihnen wählen. Also zuerst dachte ich über eine UITableView, aber das ist einfach nicht das Richtige. Es vergeudet viel Platz auf dem Bildschirm. Anstatt alle unterhalb der anderen Bilder setzen, wäre es besser, ein Raster zu zeigen, von 6 Spalten sagen können und n Zeilen.
würde ich eine UIScrollView verwenden und es füllen sich mit UIView Objekte, das ich so automatisch anordnen, dass sie wie ein Raster erscheinen. Ist das der Weg zu gehen? Oder andere Vorschläge?
Lösung
Ich bin etwas sehr ähnliches in meinem app- tun ein NxN Gitter mit einem Bild unter, und ein anderer subview auf die „Linien“ zu ziehen, die alle von einem UIScrollView gehört. Ich empfehle, die eine separate Ansicht die Bilder zu zeichnen, so etwas wie:
-(void) drawRect(CGRect rect) {
CGRect smallerRect = CGRectMake(x, y, width, height);
[yourImage drawRect: smallerRect];
// repeat as needed to draw the grid
}
Ein anderes Plakat erwähnt, dass Sie nicht in der Lage sein werden, Touch-Ereignisse zu erhalten, wenn Sie Ihre Ansicht durch eine UIScrollView- dies einfach nicht wahr ist, gehört. Ich habe es zu arbeiten. Sie könnten allerdings die folgenden festlegen müssen:
[yourScrollView setUserInteractionEnabled: YES]
[yourGridView setUserInteractionEnabled: YES]
Andere Tipps
Die three20 Bibliothek eine Klasse hat, das dies tut.
Eine Tabelle Ansicht bedeutet nicht unbedingt pro Zeile ein Bild zeigt, wie Sie vorschlagen. Tabellenzellen können individuell angepasst werden und eine Zellunterklasse mit sechs 50x50 UIImageViews wäre ziemlich einfach. Es ist vielleicht weniger flexibel als eine Scroll-Ansicht aber wenn sechs Bilder pro Zeile Ihr Ziel ist dann eine Tabellenansicht ist der schnellste Weg, um es zu bekommen.
three20 ist schrecklich, ive verwendet es, nicht ich es empfehlen ... Anzeige eines Gitters einfach ...
- (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)];
}
und wenn Sie möchten, 6 Bilder, wenn in der Gegend - Setup ein BOOL für isLandscape
if (isLandscape) {
//change the divisor to change @ 6 instead of 4
}
, wenn Sie brauchen eine erweiterte Grid Besuche AQGridView (Google it)