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

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

(转) view视图的放大、缩小、旋转的更多相关文章

  1. WPF多点触摸放大缩小旋转

    原文:WPF多点触摸放大缩小旋转 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z5976749/article/details/40118437 如果 ...

  2. JS控制图片拖动 放大 缩小 旋转 支持滚轮放大缩小 IE有效

    <html> <head>     <title>图片拖动,放大,缩小,转向</title> <script type="text/ja ...

  3. 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转

    不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...

  4. AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转

    不多说,先上图片看效果,AJ分享,必须精品 这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片. 点击变换 其实用到了按钮的两个状态,再State C ...

  5. Winform 图片鼠标滚动查看(放大,缩小,旋转,拖动查看)[日常随笔]

    方法千千万,我只是其中一笔[通过控制PictureBox来控制图片,图片完全施展在控件中]...几久不做,还真有点陌生! 窗体构造中添加鼠标滚动: /// <summary> /// 窗体 ...

  6. ThreeJs 导入外部三维模型,并实现鼠标滚动放大缩小旋转效果

    let i = ; function init() { // create a scene, that will hold all our elements such as objects, came ...

  7. CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)

    出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...

  8. imageView图片放大缩小及旋转

    imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...

  9. Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)

    惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...

随机推荐

  1. Linux - Shell - 常用方法 - 备忘录

    $? 上一个指令的返回值 =成功,=失败 dmesg 检测系统开机启动信息 $() 对命令的替换,同`` ${} 对变量的替换,同$var $(()) 对内部内容进行整数运算 i= grep AAA ...

  2. Asp.net获取网站绝对路径的几种方法

    在编写ASP.NET应用程序的时候,有时候为了更好的进行控制静态文件的路径,以及网站部署过程中的虚拟路径等问题,采用绝对路径避免资源出现Not Found,下面先看看几种获取绝对路径的方法: 1. 以 ...

  3. Vue打包app

    前言 公司之前用的app就是一个套壳挂个链接就能用的app,后来需要添加微信分享方便传播,没办法只好做成混合式的app了, 因为之前做.net用vs可以创建cordova项目也试着玩过,就决定用cor ...

  4. fragment中的WebView返回上一页

    public final class Text1Fm extends Fragment { static WebView mWeb; private View mContentView; privat ...

  5. 【Python】- 第一行跟第二行的写法

    第一行:目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python:告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: ...

  6. User namespace

    uid和gid其实很简单,主要是为了填充文件的uid和gid,这些都是静态的,那么用户执行程序这又是什么意思呢?那么进程的权限又是指什么呢? http://blog.51cto.com/skypegn ...

  7. 【bzoj3866】The Romantic Hero dp

    题目描述 给你n个数,从中选出两个不相交非空集合S和T,使得S中的每一个元素都在T集合的前面,并且S集合中的所有数的亦或等于T集合中的所有数的与,求方案数 mod 10^9+7. 输入 The fir ...

  8. 路由器配置PPP协议 CHAP验证 PAP验证

    路由器配置PPP协议 CHAP验证 PAP验证 来源 https://www.cnblogs.com/tcheng/p/5967485.html PAP是两次握手,明文传输用户密码进行认证:CHAP是 ...

  9. Angular(二)

    <!DOCTYPE html> <html lang="en" ng-app='myApp'> <head> <meta charset= ...

  10. 管理页面的类 PageHelper

    using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Da ...