理解Objective c enum声明

kla*_*ter 2 c iphone enums objective-c

来自iPhone UIControl

UIControlEventAllTouchEvents      = 0x00000FFF,
UIControlEventAllEditingEvents    = 0x000F0000,
UIControlEventApplicationReserved = 0x0F000000,
UIControlEventSystemReserved      = 0xF0000000,
UIControlEventAllEvents           = 0xFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

现在我假设UIControlEventApplication是我可以用来指定自定义控件事件的'范围',但我不知道如何正确地执行它.仅当我分配0xF0000000时,控制事件才会正确触发.如果我分配任何其他内容(0xF0000001),控件事件将在不应该触发时触发.

一些澄清:

enum {
    UIBPMPickerControlEventBeginUpdate = 0x0F000000,
    UIBPMPickerControlEventEndUpdate = // Which value do I use here?

};
Run Code Online (Sandbox Code Playgroud)

我假设它是一个范围是基于文档.哪个说:

我假设这是因为文档说:一系列可供应用程序使用的控制事件值.

任何人都可以帮我理解UIControl中使用的枚举声明的类型吗?

mon*_*ker 13

我认为0x0F000000是你可以用来创建自己的控制事件的4位.

0x0F000000 = 00001111 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

所以任何组合:

0x00000001<<27 = 00001000 00000000 00000000 00000000
0x00000001<<26 = 00000100 00000000 00000000 00000000
0x00000001<<25 = 00000010 00000000 00000000 00000000
0x00000001<<24 = 00000001 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

您当然可以将这些一起创建新的:

0x00000001<<24 | 0x00000001<<25 = 00000011 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中:

enum {
    UIBPMPickerControlEventBeginUpdate = 0x00000001<<24,
    UIBPMPickerControlEventEndUpdate = 0x00000001<<25, ...
};
Run Code Online (Sandbox Code Playgroud)