下面来简单的解释一下OC里枚举的两种类型.NS_ENUM
和NS_OPTIONS
本质上是一样的都是枚举.我举个例子.
应该可以看出一些苗头.
NS_ENUM
这种声明出来的东西大部分是单选. NS_OPTIONS
声明出来的大部分是多选.
像UIViewAnimationTransition这种在用的时候肯定是只能选一种效果,你要么从左翻到右,要么从右翻到左,你做动画的时候总不能同一时刻让他同时从左到右,又从右到左翻,对吧.
而UIViewAutosizing就不一样了.我要是让子view的宽高和父View一样,那么autoviewsizing的选项肯定是类似于这种.UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
没错吧,意思就是两个options的我都得选才行.
那么如果有个场景让我判断当前的view的Autoresizing有哪几个.我怎么判断呢?
很简单.用按位与操作就行了.假设 autoResizings = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin;
我们判断autoResizings里是否有UIViewAutoresizingFlexibleLeftMargin的时候只需要if(autoResizings & UIViewAutoresizingFlexibleLeftMargin)是否为true就可以了.用二进制表示的话(这里不用care NSUInteger到底是几位的.就表示这么个意思)UIViewAutoresizingFlexibleLeftMargin = 00000001UIViewAutoresizingFlexibleWidth = 00000010UIViewAutoresizingFlexibleRightMargin = 00000100
所以根据上面的表达式,我们的autoResizings = 00000111.那么执行按位与操作是这样的.
00000111&00000001 结果就是00000001,为true.表示含有这个选项.新闻热点
疑难解答