如何编写通用的UIRectCorner函数?

时间:2013-11-30 03:37:06

标签: objective-c

这是objective-c代码:

UIBezierPath *maskPath;
maskPath = [UIBezierPath bezierPathWithRoundedRect:_backgroundImageView.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(3.0, 3.0)];

我想做的是,我想解析4个布尔值,并修改byRoundingCorners。但问题是,例如,我isRectCornerBottomLeftYES,其余的是NO,我会做这样的事情:

maskPath = [UIBezierPath bezierPathWithRoundedRect:_backgroundImageView.bounds byRoundingCorners:(UIRectCornerBottomLeft) cornerRadii:CGSizeMake(3.0, 3.0)];

但我如何控制UIRectCorner?当然,如果要检查isRectCornerBottomLeftYES是否NO以及哪一个{{1}}写出每个条件,我可以做很多其他事情。但除此之外,我该如何简化这种逻辑呢?谢谢。

1 个答案:

答案 0 :(得分:10)

没有真正的方法来“简化”逻辑。如果您有4个BOOL值,则需要检查每个值:

UIRectCorner corners = 0;
if (isRectCornerBottomLeft) {
    corners |= UIRectCornerBottomLeft;
}
if (isRectCornerBottomRight) {
    corners |= UIRectCornerBottomRight;
}
if (isRectCornerTopLeft) {
    corners |= UIRectCornerTopLeft;
}
if (isRectCornerTopRight) {
    corners |= UIRectCornerTopRight;
}

您还可以执行以下操作:

UIRectCorner corners = (isRectCornerBottomLeft ? UIRectCornerBottomLeft : 0) |
                       (isRectCornerBottomRight ? UIRectCornerBottomRight : 0) |
                       (isRectCornerTopLeft ? UIRectCornerTopLeft : 0) |
                       (isRectCornerTopRight ? UIRectCornerTopRight : 0);