说明:tag属性有很大的用处,它就好像每个UI控件的id,当多个按钮指向同一个监听方法时,可以给方法带参数UIButton,然后根据不同的tag值

来判断执行哪个按钮的监听事件;

- (IBAction)up:(UIButton *)sender // 该方法有四个btn指向,tag值是下边的,即可根据不同tag值执行相应的代码
{
//upMoveTag的tag是10
//bottomMoveTag:11
//leftMoveTag:12
//rightMoveTag:13 CGRect rect = self.targetView.frame;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
switch (sender.tag) {
case :
rect.origin.y -= Delat;
break;
case :
rect.origin.y += Delat;
break;
case :
rect.origin.x -= Delat;
break;
case :
rect.origin.x += Delat;
break; } self.targetView.frame = rect; [UIView commitAnimations]; }

魔法数字:上述代码中的tag值10,11,12,13没什么实际意义,只是用来区分不同的button的,直接写死,很不方便其他的程序员阅读;

  解决办法,将这四个值写成一个枚举

// 枚举代替魔法数字,提高代码的可读性
typedef enum{ upMoveTag = ,
bottomMoveTag,
leftMoveTag,
rightMoveTag, } moveDirec; // 监听事件中的代码的tag值就不用写死了,还提高可读性
CGRect rect = self.targetView.frame;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
switch (sender.tag) {
case upMoveTag:
rect.origin.y -= Delat;
break;
case bottomMoveTag:
rect.origin.y += Delat;
break;
case leftMoveTag:
rect.origin.x -= Delat;
break;
case rightMoveTag:
rect.origin.x += Delat;
break; }

最新文章

  1. LeetCode Remove Element
  2. Best Meeting Point
  3. sqlloader导出数据和导入数据
  4. 各种ORM安装
  5. ruby 疑难点之—— yield 和 yield self
  6. Slickflow.NET 开源工作流引擎基础介绍(一) -- 引擎基本服务接口API介绍
  7. Sqlserver循环嵌套
  8. the private key for is not installed on this mac
  9. Android实现点击事件的4种方式
  10. perl 打开和关闭文件
  11. 【百度地图API】如何区分地址解析和智能搜索?
  12. Go学习笔记(一)Let's 干吧
  13. Java内存管理及对Java对象管理
  14. Selenium获取当前窗口句柄与切换回原窗口句柄
  15. Selenium 3----设置元素等待
  16. CSAPP:信息的表和处理2
  17. Centos 6.x/7.x yum安装php5.6.X(最新版)
  18. HDFS常用操作命令
  19. 【POJ3045】Cow Acrobats(贪心)
  20. :单件模式:Singleton

热门文章

  1. 移动端1px细线的处理
  2. ajax后台return,js判断方法
  3. Cocos2d-JS中的文本菜单
  4. ApplicationContext的应用场景
  5. Webservice发布出现 测试窗体只能用于来自本地计算机的请求
  6. javascript构造函数小记
  7. 9款完美体验的HTML5/jQuery应用
  8. ResourceBundle和Properties(转载)
  9. win7 php5.5 apache 源码安装 imagick扩展
  10. argularJS学习笔记-增删改