UINavigationController com barra de navegação de forma personalizada

Estou tentando criar um UINavigationBar personalizado com uma forma personalizada, como esta (ignore a transparência)

Como você pode ver, esse UINavigationBar tem um formato personalizado e estou tentando replicá-lo.

Olhando em volta eu encontreiesta resposta, onde explica os primeiros passos que segui.

1) Criei uma subclasse de UINavigationBar chamada CustomNavigationBar. 2) Substituí o método sizeThatFits assim:

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

3) E aqui é onde eu estou perdido ...

Na resposta anterior, é dito que o UIBezierPath pode ser usado para criar uma forma personalizada (mesmo com curvas) e, em seguida, aplicada como uma máscara. Eu tentei esse drawRect substituindo, mas tudo o que recebo é uma grande barra de navegação preta (a cor da minha barra está definida para vermelho).

EDIT: meu sorteio estava errado, este é o correto

- (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 dito abaixo, meu código teve alguns erros e agora desenha alguma coisa.

Como você pode ver, o UIBezierPath define a forma corretamente, mas há alguns novos problemas:

1) A barra de status é completamente preta, nada é renderizado ali, mesmo que eu mude sua cor para clara, ela não mostra nada. o que estou perdendo?

2) Devido ao método sizeThatFits, ainda resta alguma parte preta. Existe alguma maneira de tornar essa parte transparente?

Obrigado a todos!

EDIT 2: bem, mudei totalmente minha perspectiva sobre esse problema e acho que estou chegando perto de uma solução. Agora estou tentando usar um arquivo png transparente como plano de fundo, mas ainda preciso aumentar sua altura, então esse é o meu 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];
}

Mais simples, certo? Obviamente "Layer3" é o nome da minha imagem png transparente. Mas agora, é isso que estou recebendo.

Como você pode ver, a barra de status não é coberta pela imagem png.

O que estou perdendo agora?

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion