我正在尝试将整数值转换为内容对齐方式。整数可以同时保持水平和垂直对齐。
首先,我创建了一个枚举,它描述了所有可能性(我必须使用 android Gravity 类的值:http://developer.android.com/reference/android/view/Gravity.html)
typedef enum{
GravityHorizontalCenter = 1, // (0x00000001)
GravityLeft = 2, // (0x00000002)
GravityRight = 5, // (0x00000005)
GravityVerticalCenter = 16, // (0x00000010)
GravityTop = 48, // (0x00000030)
GravityBottom = 80, // (0x00000050)
} GravityType;
所以
int alignment = GravityRight | GravityTop
将是 53。我想检查我的 View 对象的对齐方式,如下所示:
if ((textAlignment & GravityHorizontalCenter) == GravityHorizontalCenter){
return NSTextAlignmentCenter;
}...
但似乎缺少一些东西,因为对于 53,if 语句
textAlignment & GravityHorizontalCenter) == GravityHorizontalCenter
返回 True
.
最佳答案
您需要垂直和水平范围的蒙版。
typedef enum{
GravityHorizontalCenter = 1, // (0x00000001)
GravityLeft = 2, // (0x00000002)
GravityRight = 5, // (0x00000005)
GravityHorizontalMask = 7, // (0x00000007)
GravityVerticalCenter = 16, // (0x00000010)
GravityTop = 48, // (0x00000030)
GravityBottom = 80, // (0x00000050)
GravityVerticalMask = 112, // (0x00000070)
} GravityType;
然后你可以做一个测试:
(textAlignment & GravityHorizontalMask) == GravityHorizontalCenter
或者
(textAlignment & GravityVerticalMask) == GravityTop
这些值只适合直接比较,因为 5(101 二进制)和 1(001 二进制)作为位掩码重叠。但是由于您将两个值存储在相同的数字中(前 4 位用于水平对齐,后 4 位用于垂直对齐),您需要一个掩码来隔离您要比较的位范围。
此外,您应该知道在 Android 上
LEFT
的值(左重力常数)是 3 而不是 2。因此,如果您的枚举确实需要与 Android 兼容,那么您的 GravityLeft
值可能不正确。
关于ios - 如何通过整数获得垂直和水平对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16984934/