如何在IOS中完成可调整大小的UIView的一角?

 手机用户2502880821 发布于 2023-01-31 20:43

我正在使用此代码来完善我的一个角落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也有这样的圆角,他们的应用程序也遇到了同样的问题.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有