2012-01-05 29 views
6

如何在屏幕截圖中看到應用於整個視圖的圓角(請注意,導航欄和鍵盤圓角都是圓角的)?爲整個應用程序應用圓角

我試過window.layerwindow.rootViewController.view.layer都設置爲cornerRadius = 10masksToBounds = YES,但只有底部的視角變圓,導航欄仍然保持正方形。

更新。 設置cornerRadiuswindow.layer實際上增加了圓角頂端太多,但除非cornerRadius是大於20

Example

回答

17

好吧,我問安德魯·斯通,Twittelator抵達Neue開發商,在Twitter上,這是他的配方,發佈與安德魯的許可:

我們g在Neue上寫一本關於編碼技巧的書!我們覆蓋一個窗口W包含了一切4個角的圖像

我們也有可伸縮的圖像W /頂部圓潤

因此,這裏就是我在我自己的項目做了一個自定義導航欄:

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是一個帶黑角的透明全屏圖像。

+0

這樣做的時候記得要添加'#import '到你的類中,並將QuartzCore框架添加到你的項目中。 – robhasacamera 2012-09-06 20:34:44

+0

我發現這個應用程序:roundedCornerBL.png [email protected] roundedCornerBR。PNG [email protected] roundedCornerTL.png [email protected] roundedCornerTR.png [email protected] – 3lvis 2012-09-30 08:45:13

+0

有人可以共享疊加圖像(S)? – fvisticot 2012-11-14 23:17:02

0

我懷疑窗口有圓角的棱角並沒有狀態欄下可見因爲我不相信狀態欄的高度大於20個單位。我懷疑窗口是簡單地設置了黑色背景(或者需要任何顏色來匹配狀態欄,然後另一個視圖放置在頂部,頂部的視圖具有圓角。同樣,任何其他子視圖都將具有圓角角落,以幫助這個錯覺。

+0

圓角區域位於狀態欄的後面,所以如果你隱藏狀態欄,你會看到這個。 – Andy 2012-06-23 14:13:07

1

他們很可能使用包括圓角導航欄上的背景圖像。

+0

是的,我想過了。但是,如果導航欄背景包含黑角,則在模式視圖中顯示它將顯示它們在動畫過程中從底部繞着屏幕移動:) – iHunter 2012-01-05 10:09:56

+0

這是真的 - 您是否嘗試過使用透明背景的PNG? – 2012-01-05 16:15:45

+0

我還沒有嘗試過自己的透明導航欄(我決定去沒有圓角),但安德魯斯通(Twittelator Neue)告訴我他也是這樣做的(除了頂部的角落覆蓋,看到我的答案瞭解詳情)。感謝您的幫助! – iHunter 2012-01-07 10:56:13

1

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