ios - 如何通过整数获得垂直和水平对齐?

标签 ios objective-c alignment bit-shift bitmask

我正在尝试将整数值转换为内容对齐方式。整数可以同时保持水平和垂直对齐。

首先,我创建了一个枚举,它描述了所有可能性(我必须使用 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/

相关文章:

ios - 当我在 coredata 中插入 10k 数据时花了这么多时间?

c++ - boost库应该依赖于结构成员对齐吗?

iphone - 在 IOS5 中禁用横向方向

iphone - 从 Master 到 Detail UITableView,其中第二个具有分组样式

c - 如何为 gcc 指定默认的全局变量对齐方式?

html - 将 div 左中右对齐与物化时的 block 行为

ios - 在 ios 中与 inapp 电子邮件作斗争

ios - 将(iOS)自定义 UITableVIewSource 与 Xamarin MVVM-light ObservableTableViewController 绑定(bind)?

ios - 使用自动布局将 UIView 宽度设置为另一个 View 的两倍

iphone - 使用 AVPlayer 循环播放一小段视频,然后向后播放