UINavigationController con barra de navegación de forma personalizada

Estoy tratando de crear una UINavigationBar personalizada con una forma personalizada, como esta (ignorar la transparencia)

Como puede ver, este UINavigationBar tiene una forma personalizada y estoy tratando de replicarlo.

Mirando a mi alrededor encontréesta respuesta, donde explica los primeros pasos que seguí.

1) Creé una subclase de UINavigationBar llamada CustomNavigationBar. 2) anulé el método sizeThatFits como este:

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

3) Y aquí es donde estoy perdido ...

En la respuesta anterior se dice que UIBezierPath puede usarse para crear una forma personalizada (incluso con curvas) y luego aplicarse como una máscara. Probé este drawRect primordial pero todo lo que obtengo es una gran barra de navegación negra (el color de mi barra está configurado en rojo).

EDITAR: mi dibujo estaba mal, este es el correcto

- (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];
}

EDITAR: Como se dice a continuación, mi código tenía algunos errores y ahora dibuja algo.

Como puede ver, el UIBezierPath define la forma correctamente, pero hay algunos problemas nuevos:

1) La barra de estado es completamente negra, no se muestra nada allí, incluso si cambio su color a claro, no muestra nada. ¿Qué me estoy perdiendo?

2) Debido al método sizeThatFits, todavía queda parte negra. ¿Hay alguna manera de hacer que esa parte sea transparente?

¡Gracias a todos!

EDITAR 2: bueno, cambié totalmente mi perspectiva sobre este tema y creo que me estoy acercando a una solución. Ahora estoy tratando de usar un archivo png transparente como fondo, pero todavía necesito aumentar su altura, así que ahora este es mi código.

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

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

Más simple, ¿verdad? Obviamente "Layer3" es el nombre de mi imagen png transparente. Pero ahora, esto es lo que estoy obteniendo.

Como puede ver, la barra de estado no está cubierta con la imagen png.

¿Qué me estoy perdiendo ahora?

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta