Применение закругленных углов для всего приложения - PullRequest
6 голосов
/ 05 января 2012

Как реализовать закругленные углы, примененные ко всему виду, как показано на скриншоте (обратите внимание, что углы панели навигации и клавиатуры закруглены)?

Я попытался установить cornerRadius = 10 и masksToBounds = YES дляwindow.layer и window.rootViewController.view.layer, но закругляются только нижние углы обзора, панель навигации остается квадратной.

Обновление. Установка cornerRadius на window.layer на самом делетакже добавляет закругленные углы в верхнюю часть, но эти углы не отображаются под строкой состояния, если cornerRadius не превышает 20.

Example

Ответы [ 4 ]

17 голосов
/ 06 января 2012

Хорошо, я спросил Эндрю Стоуна, разработчика Twittelator Neue , в Твиттере, и вот его рецепт, опубликованный с разрешения Эндрю:

Мы собираемся написать книгу о трюках кодирования в Neue! Мы накладываем окно с изображением, содержащим 4 угла по всему

У нас также есть настраиваемая панель навигации с растягиваемым изображением с закругленными вершинами

Итак, вот как я это сделал в своем собственном проекте:

UIImage *overlayImg = [UIImage imageNamed:@"overlay.png"];
CALayer *overlay = [CALayer layer];
overlay.frame = CGRectMake(0, 0, overlayImg.size.width, overlayImg.size.height);
overlay.contents = (id)overlayImg.CGImage;
overlay.zPosition = 1;
[self.window.layer addSublayer:overlay];

overlay.png - это прозрачное полноэкранное изображение с черными углами.

1 голос
/ 09 июля 2012

Ответ iHunter отлично работает для меня, за исключением случаев, когда я пытаюсь использовать TWTweetComposeViewController, который показывает клавиатуру, но не вид твита. Затем я должен сделать оверлей как свойство в AppDelegate.h, а перед tweetView удалить оверлей. По завершении твита снова включите добавление оверлея.

AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.overlay removeFromSuperlayer];
TWTweetComposeViewController *tweetSheet = [[TWTweetComposeViewController alloc] init];
tweetSheet.completionHandler = ^(TWTweetComposeViewControllerResult result) {
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [delegate.window.layer addSublayer:delegate.overlay];
};
[self presentModalViewController:tweetSheet animated:YES];
1 голос
/ 05 января 2012

Вероятно, они используют фоновое изображение на панели навигации, которое включает в себя скругленные углы.

0 голосов
/ 05 января 2012

Я сомневаюсь, что окно имеет закругленные углы, потому что я не верю, что строка состояния имеет высоту более 20 единиц.Я подозреваю, что окно просто установлено с черным фоном (или любой другой цвет, необходимый для соответствия строке состояния, а затем другой вид находится сверху. Этот вид сверху имеет закругленные углы. Аналогично, любые другие подпредставления будут округленыуглы, чтобы помочь с этой иллюзией.

...