我正在使用此代码来完善我的一个角落UIView
:
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect: self.view.bounds byRoundingCorners:(UIRectCornerTopLeft) cornerRadii: CGSizeMake(10.0, 10.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.view.bounds; maskLayer.path = maskPath.CGPath; self.view.layer.mask = maskLayer; self.view.layer.masksToBounds = NO;
只要我没有调整视图大小,此代码就可以正常工作.如果我使视图变大,则不会出现新区域,因为它超出了遮罩层的边界(此遮罩层不会自动调整视图的大小).我可以让面具尽可能大,但它可以在iPad上全屏显示,所以我担心面具的性能很大(我的面具中不止一个) UI).另外,超大的口罩不会为我需要上的情况下工作右侧角球(单独)进行四舍五入.
有没有更简单,更简单的方法来实现这一目标?
更新:这是我想要实现的目标:http://i.imgur.com/W2AfRBd.png(我想要的圆角在这里以绿色圈出).
我已经实现了这个的工作版本,使用的子类UINavigationController
和覆盖viewDidLayoutSubviews
如下:
- (void)viewDidLayoutSubviews { CGRect rect = self.view.bounds; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerTopLeft cornerRadii:CGSizeMake(8.0, 8.0)]; self.maskLayer = [CAShapeLayer layer]; self.maskLayer.frame = rect; self.maskLayer.path = maskPath.CGPath; self.view.layer.mask = self.maskLayer; }
然后我UINavigationController
用我的视图控制器实例化我的子类,然后我将导航控制器视图的帧偏移20px(y)以显示状态栏并留下一个44像素高的导航栏,如图所示.
代码正在运行,除了它根本不能很好地处理旋转.当app旋转时,在旋转之前viewDidLayoutSubviews
调用,我的代码创建一个适合旋转后视图的掩码; 这会对旋转产生不希望的阻塞,其中应该隐藏的位在旋转期间暴露.此外,虽然应用程序的旋转在没有此蒙版的情况下非常平滑,但是在创建蒙版的情况下,旋转变得明显不稳定且变慢.
iPad应用程序Evomail也有这样的圆角,他们的应用程序也遇到了同样的问题.