11 Stimmen

Wie erstelle ich ein Raster aus Symbolen wie auf dem iPhone-Startbildschirm?

Wie sollte ich vorgehen, um eine Benutzeroberfläche ähnlich dem Springboard (Startbildschirm) auf dem iPhone zu erstellen? Ich möchte ein Raster von gleichmäßig verteilten Schaltflächen mit Bildern, wo ich auf die Schaltfläche tippen reagieren kann.

Ist der UITable eine gute Lösung? Sollte ich ein einfaches UIView verwenden und die Icons manuell in DrawRect positionieren? Gibt es eine Alternative, die die Schaltflächen automatisch gleichmäßig verteilt, eine Neuanordnung ermöglicht und das Layout entsprechend der iPhone-Ausrichtung anpasst?

Ich komme aus einem C#/Winforms-Hintergrund und beginne gerade erst mit der iPhone-Entwicklung auf der Open Toolchain mit 2.2.1 Headern.

0 Stimmen

Vielleicht sollten Sie mehr Informationen über die Domäne angeben. Außerdem sollten Sie die Frage mit dem Framework kennzeichnen, das Sie für die Entwicklung verwenden.

0 Stimmen

"Domäneninformationen"? Wie... der Zweck der App? Es wird ein Raster von Icons sein, die, wenn sie gedrückt werden, einen Sound abspielen. Welche Frameworks gibt es? Ich bin neu auf diesem Gebiet und weiß nicht, wie die ganzen Namen lauten. Wie stelle ich fest, welches Framework ich verwende?

6voto

Kristopher Johnson Punkte 78933

Ich habe einen Beispielcode geschrieben, um so etwas zu tun. Siehe mein Kacheln Blogeintrag, oder laden Sie einfach den Code herunter: Kacheln-v1.0.zip .

Mein Code erstellt die Icons als Core Animation-Ebenen, nicht als UIViews, zeigt aber, wie man Taps erkennt und die Icons neu anordnen kann. Es behandelt keine Änderungen der Ausrichtung.

4voto

Joost Schuur Punkte 4095

Altes Thema, aber Sie sollten sich Alan Quartrmain's AQGridView auch.

0 Stimmen

Ich habe mir AQGridView genau angesehen - es scheint alles zu können, und es wird in einigen kommerziellen Anwendungen verwendet. Entschieden gegen es schließlich, weil (1) es ist riesig, viel Code, die mich verwirrt, kann nicht so schwer sein?! und (2) es stürzte auf mich, wenn ich zog Icons. Kombiniert man das mit einer großen Codebasis, kann man sich ausrechnen, dass man viel Zeit damit verbringt, den Code von jemand anderem zu reparieren, obwohl man einfach seinen eigenen schreiben könnte. Ich mag den Ansatz, den AQGridView verfolgt - er basiert auf UITableView mit Delegate und Source und wiederverwendbaren Zellen. Aber ich werde meine eigenen rollen.

2voto

August Punkte 12061

Sie müssen Ihre Symbole (die UIViews einer Art sind) als Unteransichten Ihrer "Sprungbrett"-Ansicht hinzufügen. Keine benutzerdefinierte Zeichnung benötigt, und ein UITable ist thh absolut falschen Weg zu gehen. Sie müssen nur die Mathematik zu tun, um sie richtig zu platzieren (durch die Einstellung ihrer Rahmen).

0 Stimmen

Manueller Rechenweg? Ich hatte gehofft, dass es einen einfacheren Weg gibt. Tja. Danke! Ich bin nicht schlau, was die UITable angeht. Warum ist es nicht eine gute Passform?

2 Stimmen

UITable ist hervorragend für Listen geeignet. Jedes Objekt in seiner eigenen Zeile. Mit einer UIView können Sie jedoch Ihr eigenes Raster gestalten, mit Ansichten, wo immer Sie sie haben möchten.

0 Stimmen

Das macht Sinn. Aus einer .NET-Perspektive ist die UITable eher ein GridView als ein TableLayout.

1voto

Nick VanderPyle Punkte 2809

@August: Ich habe deinen Rat befolgt und die UIButtons als Unteransichten der UIView hinzugefügt, anstatt weiter in die UITable zu schauen. Danke!

Hoffentlich hilft der unten stehende Code jemand anderem auf die Sprünge. Ich habe statisch 4 Schaltflächen in einem Raster platziert. Es sollte nicht viel schwieriger sein, eine beliebige Anzahl von Schaltflächen nach der übergeordneten UIView's Grenzen und Orientierung zu platzieren.

@implementation IconView
- (id)initWithFrame:(struct CGRect)windowRect{
  self = [super initWithFrame: windowRect];
  if (self != nil){
    for(int i = 0; i < 4; i++){
      buttons[i] = [self buildButton];
      [self addSubview: buttons[i]];
    }
    [self reInit];
  }
  return self;
}
- (UIButton *) buildButton{
  UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];
  [button setBackgroundImage: [[UIImage imageNamed:@"icon.png"] stretchableImageWithLeftCapWidth:60 topCapHeight:0] forState:UIControlStateNormal];
  return [button autorelease];
}
- (void)reInit{
  CGRect rect;
  rect = buttons[0].frame;
  rect.origin = CGPointMake(5, 5);
  buttons[0].frame = rect;

  rect = buttons[1].frame;
  rect.origin = CGPointMake(70, 5);
  buttons[1].frame = rect;

  rect = buttons[2].frame;
  rect.origin = CGPointMake(5, 70);
  buttons[2].frame = rect;

  rect = buttons[3].frame;
  rect.origin = CGPointMake(70, 70);
  buttons[3].frame = rect;
}
@end

0 Stimmen

Was sind "Knöpfe"? Wie haben Sie eine Sammlung von UIButtons erhalten?

0 Stimmen

Ein UIButton ist einfach eine UIView mit einigen zusätzlichen Methoden. Es wäre trivial, das Beispiel zu ändern, um UIView anstelle von UIButton zu verwenden.

0voto

Nareshkumar Punkte 2281

Verwenden Sie die gridView-Implementierung von Arijasoft. Es handelt sich um eine statische Bibliothek, mit der Sie den Gittertyp der Ansicht mit Rückrufen und Delegatmethoden zur Optimierung generieren können

0 Stimmen

Ist dies eine kommerzielle Bibliothek? Wenn ja, wie viel kostet sie?

0 Stimmen

Die Demo-Version auf der Website hochgeladen sie sagen, funktioniert bis feb letzten Tag. kontaktieren Sie sie, wenn Sie die kommerzielle Bibliothek benötigen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X