控件移动,放大,缩小,旋转

1,代码添加控件

例如:

  1. /*
  2. 1.创建一个控件
  3. 2.设置控件的位置,大小
  4. 3.设置控件所需要的各个属性
  5. 4.添加入父控件
  6. 5.添加监听
  7. */
  8. UIButton *btn1=[[UIButton alloc] init]; // 创建一个控件
  9. btn1.frame=CGRectMake(20, 20, 100, 100); // 设置控件的位置,大小
  10. [btn1 setTitle:@"123" forState:UIControlStateNormal]; // 设置控件所需要的各个属性
  11. [btn1 setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];
  12. [btn1 setTitle:@"456" forState:UIControlStateHighlighted];
  13. [btn1 setBackgroundImage:[UIImage imageNamed:@"btn_02" ] forState:UIControlStateHighlighted];
  14. [self.view addSubview:btn1]; // 添加入父控件
  15. [btn1 addTarget:self action:@selector(clickMove:) forControlEvents:UIControlEventTouchUpInside]; // 添加监听

2.控件的常见属性
所有的UI控件最终都继承自UIView:
UI控件的公共属性都定义在UIView中

  1. @property(nonatomic,readonly) UIView *superview; // 获得自己的父控件对象
  2. @property(nonatomic,readonly,copy) NSArray *subviews; //获得自己的所有子控件对象
  3. @property(nonatomic) NSInteger tag; //控件的ID(标识),父控件可以通过tag来找到对应的子控件
  4. @property(nonatomic) CGAffineTransform transform; //控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
  5. @property(nonatomic) CGRect frame; // 控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
  6. @property(nonatomic) CGRect bounds; // 控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
  7. @property(nonatomic) CGPoint center; // 控件中点的位置(以父控件的左上角为坐标原点)

3.UIView的常见方法

  1. - (void)addSubview:(UIView *)view; // 添加一个子控件view
  2. - (void)removeFromSuperview; // 从父控件中移除
  3. - (UIView *)viewWithTag:(NSInteger)tag; // 根据一个tag标识找出对应的控件(一般都是子控件)
  4. // 注意:下面代码是错误的,OC语法规定:不允许直接修改对象的结构体属性的成员
  5. self.headBtn.frame.origin.y -= 10;

图片移动的3中方式

1. transform方式来移动图片 (最常用)

  1. typedef enum{
  2. kMovingDirTop,
  3. kMovingDirBottom,
  4. KMovingDirLieft,
  5. kMovingDirRight,
  6. kMovingDir;
  7. // 已fram点来移动(注意图片旋转后,移动的方向)
  8. switch (btn.tag) {
  9. case kMovingDirTop:
  10. // 改变控件的位置
  11. self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 0, -20);
  12. break;
  13. case kMovingDirBottom:
  14. self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 0, 20);
  15. break;
  16. case KMovingDirLieft:
  17. self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, -20, 0);
  18. break;
  19. case kMovingDirRight:
  20. self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 20, 0);
  21. break;
  22. default:
  23. break;
  24. };

2. 使用center来移动控件

  1. // 以中心点来移动 (注意图片旋转后,移动的方向)
  2. CGPoint p = self.headImageView.center;
  3. switch (btn.tag) {
  4. case kMovingDirTop:
  5. // 改变控件的位置
  6. p.y -= 20;
  7. break;
  8. case kMovingDirBottom:
  9. p.y += 20;
  10. break;
  11. case KMovingDirLieft:
  12. p.x -= 20;
  13. break;
  14. case kMovingDirRight:
  15. p.x += 20;
  16. break;
  17. default:
  18. break;
  19. };
  20. self.headImageView.center = p;

3.使用frame来控制控件位置

  1. // 会出现问题。(如果先旋转图片后,在点击移动图片会消失不见?????)
  2. CGRect rect=self.headImageView.frame;
  3. switch (btn.tag) {
  4. case kMovingDirTop:
  5. // 改变控件的位置
  6. rect.origin.y = rect.origin.y-20;
  7. break;
  8. case kMovingDirBottom:
  9. rect.origin.y = rect.origin.y+20;
  10. break;
  11. case KMovingDirLieft:
  12. rect.origin.x = rect.origin.x-20;
  13. break;
  14. case kMovingDirRight:
  15. rect.origin.x = rect.origin.x+20;
  16. break;
  17. default:
  18. break;
  19. };
  20. elf.headImageView.frame=rect;

放大,缩小,旋转控件(3种方式)

  1. typedef enum{
  2. kAdd=5,
  3. KRemore,
  4. kRotateLeft,
  5. kRotatelRight,
  6. }kTranform;

1.transform方式,放大,缩小,旋转控件 (最常用)

  1. /* 会以中心点来放大,缩小,旋转控件 */
  2. switch (btn.tag) {
  3. case kAdd:
  4. // 改变控件的大小
  5. self.headImageView.transform = CGAffineTransformScale(self.headImageView.transform, 1.2, 1.2);
  6. break;
  7. case KRemore:
  8. self.headImageView.transform = CGAffineTransformScale(self.headImageView.transform, 0.8, 0.8);
  9. break;
  10. case kRotateLeft:
  11. // 在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI
  12. // 正数表示顺时针旋转
  13. // 负数表示逆时针旋转
  14. self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, -M_PI_4);
  15. break;
  16. case kRotatelRight:
  17. self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, M_PI_4);
  18. break;
  19. default:
  20. break;
  21. };

2.  bounds方式,放大,缩小

  1. /* 会以控件顶点来放大,缩小,然后计算出frame的x,y后再移动回去。启用动画效果时,一瞬间放大,然后移动到计算出的frame的x,y位置 */
  2. CGRect rect = self.headImageView.bounds;
  3. switch (btn.tag) {
  4. case kAdd:
  5. rect.size.width += 20;
  6. rect.size.height += 20;
  7. break;
  8. case KRemore:
  9. rect.size.width -= 20;
  10. rect.size.height -= 20;
  11. break;
  12. default:
  13. break;
  14. };
  15. self.headImageView.bounds = rect;

3.2.  frame方式,放大,缩小

  1. /* 会以控件顶点来放大,缩小*/
  2. CGRect rect = self.headImageView.frame;
  3. switch (btn.tag) {
  4. case kAdd:
  5. rect.size.width += 20;
  6. rect.size.height += 20;
  7. break;
  8. case KRemore:
  9. rect.size.width -= 20;
  10. rect.size.height -= 20;
  11. break;
  12. default:
  13. break;
  14. };
  15. self.headImageView.frane = rect;

总结:
通过以下属性可以修改控件的位置
frame.origin
center

通过以下属性可以修改控件的尺寸
frame.size
bounds.size

利用transform属性可以修改控件的位移(位置)、缩放、旋转

链接地址:http://blog.csdn.net/dwt1220/article/details/26871777

最新文章

  1. C语言:break和continue
  2. iOS nib file owner
  3. 约瑟夫问题(c++实现)
  4. celery 快速入门教程 celery 定时器
  5. Html 的实体字符大全
  6. handlebar JS模板使用笔记
  7. 每日冲刺报告--Day2
  8. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri
  9. Node.js_express_临时会话对象 session
  10. 以太坊钱包开发系列4 - 发送Token(代币)
  11. ActiveMQ安装使用
  12. tfs查看最近签入记录及文件
  13. 【转】Android 4.4中播放HTML5视频<video>的Bug
  14. redis命令手册
  15. 关闭 iTunes 自动同步
  16. MySQL MGR实现分析 - 成员管理与故障恢复实现
  17. 【[AH2017/HNOI2017]礼物】
  18. 在Code::Blocks中编译和使用wxWidgets3.0.0教程
  19. 推荐一些不错的开源免费易上手的web前端框架
  20. javascript快速入门4--函数与内置对象

热门文章

  1. disable-network-config
  2. 【志银】Win764位配置Github环境及将代码部署到Github pages-志银强势总结
  3. JavaSE复习(一)继承多态与常用API
  4. 华为手机怎么安装Google
  5. WCF的坎坷发布之路
  6. Spark on Yarn——spark1.5.1集群配置
  7. 【CF Edu 28 C. Four Segments】
  8. java中的UDP总结
  9. 《R语言实战》读书笔记--第三章 图形初阶(一)
  10. bzoj 4407 于神之怒加强版 (反演+线性筛)