UIView的两个角落
不久之前,我发布了一个关于在视图的两个角上进行四舍五入的问题,得到了很好的响应,但是在实现它时遇到了问题。这是我的drawRect:方法:
- (void)drawRect:(CGRect)rect {
//[super drawRect:rect]; <------Should I uncomment this?
int radius = 5;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius, radius, M_PI, M_PI / 2, 1);
CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);
CGContextClosePath(context);
CGContextClip(context);
}
正在调用该方法,但似乎不会影响视图的结果。有什么想法吗?
没有找到相关结果
已邀请:
18 个回复
宦哨抹存胳
提前致谢。 仅供参考:
拟僚疽刊剔
遮蔽。有两种方法可以做到这一点。第一个是更优雅,第二个是解决方法:-)但它也很快。两者都基于
掩蔽。我去年在几个项目中使用了这两种方法,然后我希望你能找到有用的东西。 解决方案1 首先,我创建了这个函数来动态生成一个图像蒙版(
),我需要圆角。该功能基本上需要5个参数:图像边界和4个角半径(左上角,右上角,左下角和右下角)。
现在你只需要几行代码。我把东西放在我的viewController
方法中因为它更快但你也可以在自定义
中使用它,例如
方法。
解决方案2 这个解决方案有点“脏”。基本上你可以用你需要的圆角创建一个遮罩层(所有角落)。然后,您应该通过角半径的值增加遮罩层的高度。通过这种方式,底部圆角被隐藏,您只能看到上圆角。我把代码放在
方法中因为它更快但你也可以在自定义
中使用它,例如
方法。
希望这可以帮助。再见!
骚瓤
和
是最简单,最直接的方式。它可能不适用于非常复杂的情况,但是对于偶尔的角落圆角,它对我来说工作快速而顺畅。 我创建了一个简化的帮助器,在面具中设置适当的角落:
要使用它,只需使用适当的UIRectCorner枚举调用,例如:
请注意,对我来说,我使用它来分组UITableViewCell中的照片圆角,10.0半径适合我,如果需要只是根据需要更改值。 编辑:只是注意到之前的答案非常类似于这个(链接)。如果需要,您仍然可以将此答案用作附加的便利功能。 编辑:与Swift 3中的UIView扩展相同的代码
要使用它,在任何
上简单地调用
:
奥李
创建一个
并将其用作蒙版。 此外,在使用图层蒙版时,请确保在添加蒙版时,您正在屏蔽的图层不是任何图层层次结构的一部分。否则行为未定义。如果您的视图已经在层次结构中,则需要将其从超级视图中删除,将其屏蔽,然后将其放回原位。
由于Core Animation渲染的工作方式,掩蔽操作相对较慢。每个掩码需要额外的渲染通道。所以请谨慎使用面具。 这种方法的最佳部分之一是您不再需要创建自定义
并覆盖
。这应该使您的代码更简单,甚至更快。
夏瓤跋棘
上创建了一个类别,以允许其遵守DRY原则。无需再费周折: UIView的+ Roundify.h
UIView的+ Roundify.m
致电:
邵酮
并称之为
瓜唱鬼
的扩展名。通过这样做,所有子类都将能够使用以下方法:
用法示例:
死狸蔽垂藐
根据您的需要更改“AllCorners”。
犀耽澄协吻
有时可能会打击它。 例如,底角需要圆角。如果高度或 底部间距约束设置为需要舍入的UIView, 圆角的代码片段需要移动到
方法。 高亮:
如果此代码在
中设置,则上面的代码段仅围绕右上角。因为
会在约束更新
后发生变化。
门锑腺潮
梆晨灸碾
稳赣苍卯改
戊袱
寇剩
我们已经将maskByRoundingCorners编写为UIView扩展,以便改进代码重用。 致@SachinVsSachin和@ P.L :)我已经将他们的代码组合起来以使其更好。
赣借
马口
。在子视图上设置圆角,然后将其放置在父视图中,以便裁剪您想要的直角。
不支持您希望两个对角相对的圆角圆滑的情况。
街茬
程序上它应该围绕所有四个角落,但由于某种原因它只围绕前两个。 **请参阅下面的屏幕截图,看看我上面编写的代码的效果。 我希望这有帮助!
讹巳漓把备
在代码中的某个地方设置该属性。