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!