UINavigationController с пользовательской панелью навигации формы
Я пытаюсь создать пользовательский UINavigationBar с пользовательской формой, как это (игнорировать прозрачность)
Как вы можете видеть, этот UINavigationBar имеет собственную форму, и я пытаюсь повторить ее.
Оглядываясь вокруг я нашелэтот ответ, где это объясняет первые шаги, за которыми я следовал.
1) Я создал подкласс UINavigationBar под названием CustomNavigationBar. 2) Я переопределил метод sizeThatFits следующим образом:
- (CGSize) sizeThatFits:(CGSize)size
{
return CGSizeMake(320.0, 70.0);
}
3) И вот где я потерялся ...
В предыдущем ответе сказано, что UIBezierPath можно использовать для создания пользовательской фигуры (даже с кривыми), а затем применять в качестве маски. Я попробовал этот переопределенный drawRect, но все, что я получаю, это большая черная панель навигации (мой цвет панели установлен на красный).
РЕДАКТИРОВАТЬ: моя ничья была неправильной, это правильный
- (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];
}
РЕДАКТИРОВАТЬ: Как сказано ниже, в моем коде было несколько ошибок, и теперь он что-то рисует.
Как вы можете видеть, UIBezierPath правильно определяет форму, но есть некоторые новые проблемы:
1) Строка состояния полностью черная, там ничего не отображается, даже если я изменю его цвет на светлый, он ничего не показывает. Что мне не хватает?
2) Из-за метода sizeThatFits осталась еще какая-то черная часть. Есть ли способ сделать эту часть прозрачной?
Спасибо всем!
РЕДАКТИРОВАТЬ 2: хорошо, я полностью изменил свое мнение об этой проблеме, и я думаю, что приближаюсь к решению. Сейчас я пытаюсь использовать прозрачный png-файл в качестве фона, но все же нужно увеличить его высоту, так что сейчас это мой код.
- (CGSize) sizeThatFits:(CGSize)size
{
return [[UIImage imageNamed:@"Layer3"] size];
}
- (void)drawRect:(CGRect)rect
{
[self setClipsToBounds:NO];
UIImage *image = [UIImage imageNamed:@"Layer3"];
[image drawInRect:rect];
}
Проще, правда? Очевидно, «Layer3» - это название моего прозрачного изображения в формате png. Но сейчас это то, что я получаю.
Как видите, строка состояния не покрыта изображением png.
Чего мне не хватает сейчас?
Спасибо!