UINavigationController mit benutzerdefinierter Formnavigationsleiste

Ich versuche, eine benutzerdefinierte UINavigationBar mit einer benutzerdefinierten Form wie folgt zu erstellen (Transparenz ignorieren)

Wie Sie sehen können, hat diese UINavigationBar eine benutzerdefinierte Form und ich versuche, sie zu replizieren.

Umschauen fand ichdiese Antwort, wo die ersten Schritte erklärt werden, denen ich gefolgt bin.

1) Ich habe eine Unterklasse von UINavigationBar mit dem Namen CustomNavigationBar erstellt. 2) Ich habe die sizeThatFits-Methode wie folgt überschrieben:

- (CGSize) sizeThatFits:(CGSize)size
{
  return CGSizeMake(320.0, 70.0);
}

3) Und hier bin ich verloren ...

In der vorherigen Antwort heißt es, dass UIBezierPath zum Erstellen einer benutzerdefinierten Form (auch mit Kurven) verwendet und dann als Maske angewendet werden kann. Ich habe dieses überschreibende drawRect ausprobiert, aber alles, was ich bekomme, ist eine große schwarze Navigationsleiste (meine Balkenfarbe ist auf rot eingestellt).

EDIT: meine Auslosung war falsch, das ist die richtige

- (void)drawRect:(CGRect)rect
{
  UIBezierPath *path = [[UIBezierPath alloc] init];
  [path moveToPoint:CGPointZero];
  [path addLineToPoint:CGPointMake(320.0, 0.0)];
  [path addLineToPoint:CGPointMake(320.0, 50.0)];
  [path addQuadCurveToPoint:CGPointMake(0.0, 50.0) controlPoint:CGPointMake(160.0, 90.0)];
  [path closePath];

  [[UIColor redColor] setFill];

  [path fill];
}

BEARBEITEN Wie unten gesagt, mein Code hatte einige Fehler und zeichnet jetzt etwas.

Wie Sie sehen können, definiert der UIBezierPath die Form korrekt, es gibt jedoch einige neue Probleme:

1) Die Statusleiste ist komplett schwarz, dort wird nichts gerendert, auch wenn ich seine Farbe in hell ändere, wird nichts angezeigt. Was vermisse ich

2) Aufgrund der sizeThatFits-Methode ist noch ein schwarzer Teil übrig. Gibt es eine Möglichkeit, diesen Teil transparent zu machen?

Dank an alle

EDIT 2: Nun, ich habe meine Sichtweise in Bezug auf dieses Problem grundlegend geändert und denke, ich komme einer Lösung sehr nahe. Jetzt versuche ich, eine transparente PNG-Datei als Hintergrund zu verwenden, muss aber immer noch die Höhe erhöhen. Im Moment ist dies mein Code.

- (CGSize) sizeThatFits:(CGSize)size
{
   return [[UIImage imageNamed:@"Layer3"] size];
}

- (void)drawRect:(CGRect)rect
{
  [self setClipsToBounds:NO];
  UIImage *image = [UIImage imageNamed:@"Layer3"];
  [image drawInRect:rect];
}

Simpler, richtig? Offensichtlich ist "Layer3" der Name meines transparenten PNG-Bildes. Aber jetzt bekomme ich das.

Wie Sie sehen, ist die Statusleiste nicht mit dem PNG-Bild bedeckt.

Was vermisse ich jetzt?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage