如何在应用屏幕上制作圆角?

9

你可能已经注意到,大多数(如果不是全部)系统应用程序都显示带有圆角的屏幕。我的意思是,设备屏幕的四个角看起来是圆角的。

然而,大多数第三方应用程序不是这样的(四个角是90度角),但我见过一些第三方应用程序也是这样的,比如Facebook Messenger。还有许多其他应用程序只在启动画面上出现这种效果,这可能只是对default.png图像文件的修改。

是否有一种属性可以实现这种效果?

4个回答

16
如果您想在整个应用程序中使用圆角,而不必在每个不同的视图控制器中显式地重新创建它们,请在AppDelegate中调用它:(didFinishLaunching方法)
[self.window.layer setCornerRadius:20.0];
[self.window.layer setMasksToBounds:YES];
self.window.layer.opaque = NO;

不要忘记:

#import <QuartzCore/QuartzCore.h>

这种方法更好,因为它在WINDOW上创建动画,而不是VIEW上。因此,您可以设计其余UI的90度角,它们将自动变成圆角。只需要调用一次就可以轻松完成。

如果层存在滞后情况,将其光栅化可能会提高性能:

[self.window.layer setShouldRasterize:YES];
[self.window.layer setRasterizationScale:[UIScreen mainScreen].scale];

以上操作将使动画/图形变化“像图片一样”,而不会使用户界面太重。性能将得到提升,并根据Retina或非Retina屏幕进行光栅化处理。(这是[UIScreen]调用,因为“.scale”返回2.0表示Retina,1.0表示非Retina。非常简单。

希望这有所帮助!如果有用,请打勾,我会再回来查看的! :)


3
除了顶部角落没有圆角之外,效果很好...也许是因为状态栏的缘故? - jjxtra
1
对我来说,它在不重新光栅化的情况下卡顿更少!:O 使用iOS 6,在iPhone 4上进行了测试。 - Martin Herman
很奇怪。我知道如果你在UIImage或任何类型的View上这样做,出于性能原因需要对其进行栅格化处理。特别是如果它们是静态图像(即您不通过编程更改/添加子视图来与其交互)。 - topLayoutGuide
这似乎很明显,但为了在整个应用程序中正确运行,所有UIWindow实例都应该以这种方式配置。我一直在使用UIWindow实例来显示自定义绘制的警报,这些新窗口与主UIWindow完全分离(四年晚评论,但仍然...可能对其他人有用)。 - Alejandro Iván
@AlejandroIván,很高兴你觉得它有用!顺便说一下,你可以获取对AppDelegate的引用,而不是使用多个UIWindow ;) - topLayoutGuide
显示剩余2条评论

1

以下代码可以将视图的角落变为圆角。您可以将其放在viewDidLoad中:

#import <QuartzCore/QuartzCore.h>

view.layer.cornerRadius = 7;

1
// Import QuartzCore.h at the top of the file
#import <QuartzCore/QuartzCore.h>


self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.view.layer.cornerRadius = 20.0;
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);

看看CALayers教程入门。这将是一个很好的起点。


你知道如何仅更改顶部(或底部)角落(例如分组格式中的UITableViewCell)吗? - lnafziger
@Inafziger:将视图设置为清晰颜色并添加圆角图片。 - Devang

0

@PsycoDad:这个对@cocotouch的回答的补充修复了屏幕顶部的问题。

CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.window.layer.frame = self.window.layer.bounds = 
  CGRectMake(0, 
             statusBarHeight,
             screenBounds.size.width,
             screenBounds.size.height - statusBarHeight);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接