第03天实战技术(14):枚举中的位运算
2017-03-28 00:00
375 查看
#####一、枚举中的位运算
位运算的一些理解
解析系统的forControlEvents底层实现 (系统是实用&
主要枚举中 有位运算 就可以使用并运算 | 为什么? 比如系统的UIControlEvents 我通过textField去监听开始编辑和发生改变的时候去处理事情 通过UIControlEvents 使用 | (并运算 : 两个有其中一个就会执行) >>>> [_tf addTarget:self action:@selector(textBegin) forControlEvents:UIControlEventEditingDidBegin|UIControlEventEditingChanged]; /** typedef NS_OPTIONS(NSUInteger, UIControlEvents) { UIControlEventTouchDown = 1 << 0, // on all touch downs UIControlEventTouchDownRepeat = 1 << 1, // on multiple touchdowns (tap count > 1) UIControlEventTouchDragInside = 1 << 2, UIControlEventTouchDragOutside = 1 << 3, UIControlEventTouchDragEnter = 1 << 4, UIControlEventTouchDragExit = 1 << 5, UIControlEventTouchUpInside = 1 << 6, UIControlEventTouchUpOutside = 1 << 7, UIControlEventTouchCancel = 1 << 8, UIControlEventValueChanged = 1 << 12, // sliders, etc. UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, // semantic action: for buttons, etc. UIControlEventEditingDidBegin = 1 << 16, // UITextField UIControlEventEditingChanged = 1 << 17, UIControlEventEditingDidEnd = 1 << 18, UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing UIControlEventAllTouchEvents = 0x00000FFF, // for touch events UIControlEventAllEditingEvents = 0x000F0000, // for UITextField UIControlEventApplicationReserved = 0x0F000000, // range available for application use UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use UIControlEventAllEvents = 0xFFFFFFFF }; */
位运算的一些理解
// 3210 // 2^0 = 1 // 二进制 0001 (1 * 2^0 + 0 * 2^ 1 + 0 * 2^ 2 + 0 * 2^ 3) = 1 int a = 1 << 0; // 左移动 0 位 相当于不移动 1 < 1 * 2^0 = 1 > int b = 1 << 1; // 左移动 1位 二进制为 0010 2 < 1 * 2^1 = 2 > int c = 1 << 2; // 左移动 2位 二进制为 0100 4 < 1 * 2^2 = 4 > int d = 1 << 3; // 左移动 3位 二进制为 1000 8 < 1 * 2^3 = 8 > // 左移动 n位 二进制为 < 1 * 2^n = ... >
解析系统的forControlEvents底层实现 (系统是实用&
(与运算:如果两个数都都为真(或为1),其结果为真,如果两位数中有一位为假(或为0)者结果为假))
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@end
@implementation ViewController
// 3210 // 2^0 = 1 // 二进制 0001 (1 * 2^0 + 0 * 2^ 1 + 0 * 2^ 2 + 0 * 2^ 3) = 1 int a = 1 << 0; // 左移动 0 位 相当于不移动 1 < 1 * 2^0 = 1 > int b = 1 << 1; // 左移动 1位 二进制为 0010 2 < 1 * 2^1 = 2 > int c = 1 << 2; // 左移动 2位 二进制为 0100 4 < 1 * 2^2 = 4 > int d = 1 << 3; // 左移动 3位 二进制为 1000 8 < 1 * 2^3 = 8 > // 左移动 n位 二进制为 < 1 * 2^n = ... >
- (void)viewDidLoad {
[super viewDidLoad];
// 主要枚举中 有位运算 就可以使用并运算 |
// 为什么?
[_tf addTarget:self action:@selector(textBegin) forControlEvents:UIControlEventEditingDidBegin|UIControlEventEditingChanged];
// forControlEvents 底层会去查看 有没有 UIControlEventEditingChanged
// NSLog(@"--- %d",d);
// 怎么去解析
[self test: c | b];
}
- (void)test:(int)value
{
// 解析value , 判断一下是否包含a,b,c,d
// & 与
// 使用 & 解析有没有包含 a,b,c,d
NSLog(@"--- %d %d %d %d",value & a ,value & b,value & c,value & d);
// --- 1 2 0 0
// --- 0 2 4 0
// value & b = 6 & 2 = 0110 & 0010 = 0010 = 2
// value & c = 6 & 4 = 0110 & 0110 = 0100 = 4
if (value & a) NSLog(@"包含了a");
if (value & b) NSLog(@"包含了b");
if (value & c) NSLog(@"包含了c");
if (value & d) NSLog(@"包含了d");
}
- (void)textBegin
{
NSLog(@"--- 开始编辑的时候就会调用");
}
相关文章推荐
- 第03天实战技术(09):网易新闻(抽取网易新闻)
- 第03天实战技术(07):网易新闻(标题文字缩放)
- 第01天实战技术(14):自动生成属性代码
- 第03天实战技术(10):UIScrollView的自动布局
- 第03天实战技术(11):Size和center
- 第03天实战技术(06):网易新闻(标题居中处理)
- 第03天实战技术(01):网易新闻(搭建界面)
- 第03天实战技术(02):网易新闻(设置标题)
- 第04天实战技术(14):UICollectionView自定义布局方法
- 第03天实战技术(15):assign和weak的区别
- 第03天实战技术(08):网易新闻(标题文字渐变)
- 第03天实战技术(03):网易新闻(处理标题按钮点击)
- 第03天实战技术(17):UIScrollView底层实现
- 第03天实战技术(12):通知补充
- 第03天实战技术(04):scrollView额外滚动区域
- 第03天实战技术(16):Bounds和Frame简介
- 第02天实战技术(14):父子控制器(完善)
- 第03天实战技术(05):网易新闻(监听内容滚动)
- 第03天实战技术(13):通知多线程使用
- 第03天实战技术(18):Block基本使用