所以,我最近开始学习iOS开发和Objective-C,主要是使用斯坦福大学iTunes U上的免费课程。
我最终偶然发现了位掩码,这是 iOS API 中广泛使用的东西,但我不是很熟悉。我已经阅读了一些关于它的东西,现在我至少了解了它的基础知识。
在这门斯坦福课程中,我们正在开发一款纸牌配对游戏,例如专注力游戏。卡片由按钮表示。正常状态 ( UIControlStateNormal
) 表示卡片的背面,而选定状态 ( UIControlStateSelected
) 表示卡片的正面(即其内容,称为 的字符串属性card.contents
,如“A♣”)。如果两张牌匹配,则它们将无法使用,因此它们UIControlStateDisabled
在已处于选定状态时会进入禁用状态 ( )。请参阅此图像以供参考。
在有关 Control States 的 Apple 文档中,我们可以找到定义可能状态的位掩码:
enum {
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0,
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2,
UIControlStateApplication = 0x00FF0000,
UIControlStateReserved = 0xFF000000
};
在某些时候,在斯坦福教授讲课的代码中,以下代码用于设置card.contents
选定状态(卡片正面)和选定和禁用状态组合(匹配的卡片)的标题:
[cardButton setTitle:card.contents forState:UIControlStateSelected];
[cardButton setTitle:card.contents
forState:UIControlStateSelected|UIControlStateDisabled];
我不明白的是,为什么我们需要第一行?我认为第二个就足够了,因为它通过使用 OR 组合两个状态来设置按钮的标题,所以我解释它已经“覆盖”了卡片仅处于选定状态时的情况。
经过一些测试,我显然错了,所以我不太明白iOS如何处理存储在位掩码中的选项。你能帮助我吗?
还有一件事:在上面的枚举声明中,前四个常量定义为0
, 1 << 0
, 1 << 1
, and 1 << 2
,即 , 0
, 1
, 2
and 4
。为什么开发人员将第五个和第六个定义为0x00FF0000
and 0xFF000000
,而不是1 << 3
and 1 << 4
?
提前致谢!