(转) view视图的放大、缩小、旋转
控件移动,放大,缩小,旋转
1,代码添加控件
例如:
- /*
- 1.创建一个控件
- 2.设置控件的位置,大小
- 3.设置控件所需要的各个属性
- 4.添加入父控件
- 5.添加监听
- */
- UIButton *btn1=[[UIButton alloc] init]; // 创建一个控件
- btn1.frame=CGRectMake(20, 20, 100, 100); // 设置控件的位置,大小
- [btn1 setTitle:@"123" forState:UIControlStateNormal]; // 设置控件所需要的各个属性
- [btn1 setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];
- [btn1 setTitle:@"456" forState:UIControlStateHighlighted];
- [btn1 setBackgroundImage:[UIImage imageNamed:@"btn_02" ] forState:UIControlStateHighlighted];
- [self.view addSubview:btn1]; // 添加入父控件
- [btn1 addTarget:self action:@selector(clickMove:) forControlEvents:UIControlEventTouchUpInside]; // 添加监听
2.控件的常见属性
所有的UI控件最终都继承自UIView:
UI控件的公共属性都定义在UIView中
- @property(nonatomic,readonly) UIView *superview; // 获得自己的父控件对象
- @property(nonatomic,readonly,copy) NSArray *subviews; //获得自己的所有子控件对象
- @property(nonatomic) NSInteger tag; //控件的ID(标识),父控件可以通过tag来找到对应的子控件
- @property(nonatomic) CGAffineTransform transform; //控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
- @property(nonatomic) CGRect frame; // 控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
- @property(nonatomic) CGRect bounds; // 控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
- @property(nonatomic) CGPoint center; // 控件中点的位置(以父控件的左上角为坐标原点)
3.UIView的常见方法
- - (void)addSubview:(UIView *)view; // 添加一个子控件view
- - (void)removeFromSuperview; // 从父控件中移除
- - (UIView *)viewWithTag:(NSInteger)tag; // 根据一个tag标识找出对应的控件(一般都是子控件)
- // 注意:下面代码是错误的,OC语法规定:不允许直接修改对象的结构体属性的成员
- self.headBtn.frame.origin.y -= 10;
图片移动的3中方式
1. transform方式来移动图片 (最常用)
- typedef enum{
- kMovingDirTop,
- kMovingDirBottom,
- KMovingDirLieft,
- kMovingDirRight,
- kMovingDir;
- // 已fram点来移动(注意图片旋转后,移动的方向)
- switch (btn.tag) {
- case kMovingDirTop:
- // 改变控件的位置
- self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 0, -20);
- break;
- case kMovingDirBottom:
- self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 0, 20);
- break;
- case KMovingDirLieft:
- self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, -20, 0);
- break;
- case kMovingDirRight:
- self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 20, 0);
- break;
- default:
- break;
- };
2. 使用center来移动控件
- // 以中心点来移动 (注意图片旋转后,移动的方向)
- CGPoint p = self.headImageView.center;
- switch (btn.tag) {
- case kMovingDirTop:
- // 改变控件的位置
- p.y -= 20;
- break;
- case kMovingDirBottom:
- p.y += 20;
- break;
- case KMovingDirLieft:
- p.x -= 20;
- break;
- case kMovingDirRight:
- p.x += 20;
- break;
- default:
- break;
- };
- self.headImageView.center = p;
3.使用frame来控制控件位置
- // 会出现问题。(如果先旋转图片后,在点击移动图片会消失不见?????)
- CGRect rect=self.headImageView.frame;
- switch (btn.tag) {
- case kMovingDirTop:
- // 改变控件的位置
- rect.origin.y = rect.origin.y-20;
- break;
- case kMovingDirBottom:
- rect.origin.y = rect.origin.y+20;
- break;
- case KMovingDirLieft:
- rect.origin.x = rect.origin.x-20;
- break;
- case kMovingDirRight:
- rect.origin.x = rect.origin.x+20;
- break;
- default:
- break;
- };
- elf.headImageView.frame=rect;
放大,缩小,旋转控件(3种方式)
- typedef enum{
- kAdd=5,
- KRemore,
- kRotateLeft,
- kRotatelRight,
- }kTranform;
1.transform方式,放大,缩小,旋转控件 (最常用)
- /* 会以中心点来放大,缩小,旋转控件 */
- switch (btn.tag) {
- case kAdd:
- // 改变控件的大小
- self.headImageView.transform = CGAffineTransformScale(self.headImageView.transform, 1.2, 1.2);
- break;
- case KRemore:
- self.headImageView.transform = CGAffineTransformScale(self.headImageView.transform, 0.8, 0.8);
- break;
- case kRotateLeft:
- // 在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI
- // 正数表示顺时针旋转
- // 负数表示逆时针旋转
- self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, -M_PI_4);
- break;
- case kRotatelRight:
- self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, M_PI_4);
- break;
- default:
- break;
- };
2. bounds方式,放大,缩小
- /* 会以控件顶点来放大,缩小,然后计算出frame的x,y后再移动回去。启用动画效果时,一瞬间放大,然后移动到计算出的frame的x,y位置 */
- CGRect rect = self.headImageView.bounds;
- switch (btn.tag) {
- case kAdd:
- rect.size.width += 20;
- rect.size.height += 20;
- break;
- case KRemore:
- rect.size.width -= 20;
- rect.size.height -= 20;
- break;
- default:
- break;
- };
- self.headImageView.bounds = rect;
3.2. frame方式,放大,缩小
- /* 会以控件顶点来放大,缩小*/
- CGRect rect = self.headImageView.frame;
- switch (btn.tag) {
- case kAdd:
- rect.size.width += 20;
- rect.size.height += 20;
- break;
- case KRemore:
- rect.size.width -= 20;
- rect.size.height -= 20;
- break;
- default:
- break;
- };
- self.headImageView.frane = rect;
总结:
通过以下属性可以修改控件的位置
frame.origin
center
通过以下属性可以修改控件的尺寸
frame.size
bounds.size
利用transform属性可以修改控件的位移(位置)、缩放、旋转
链接地址:http://blog.csdn.net/dwt1220/article/details/26871777
(转) view视图的放大、缩小、旋转的更多相关文章
- WPF多点触摸放大缩小旋转
原文:WPF多点触摸放大缩小旋转 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z5976749/article/details/40118437 如果 ...
- JS控制图片拖动 放大 缩小 旋转 支持滚轮放大缩小 IE有效
<html> <head> <title>图片拖动,放大,缩小,转向</title> <script type="text/ja ...
- 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...
- AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,AJ分享,必须精品 这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片. 点击变换 其实用到了按钮的两个状态,再State C ...
- Winform 图片鼠标滚动查看(放大,缩小,旋转,拖动查看)[日常随笔]
方法千千万,我只是其中一笔[通过控制PictureBox来控制图片,图片完全施展在控件中]...几久不做,还真有点陌生! 窗体构造中添加鼠标滚动: /// <summary> /// 窗体 ...
- ThreeJs 导入外部三维模型,并实现鼠标滚动放大缩小旋转效果
let i = ; function init() { // create a scene, that will hold all our elements such as objects, came ...
- CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)
出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...
- imageView图片放大缩小及旋转
imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...
- Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)
惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...
随机推荐
- UIAutomator2、Appium、Robotium搭建环境与框架对比
UIAutomator2.Appium.Robotium搭建环境与框架对比 一.框架介绍 Appium 特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生 ...
- day06_02 元组
1.0 元组 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组.元素卸载小括号(())里,元素之间用逗号隔开. tup1 = () #空元组 tup2 = (20 ...
- 孤荷凌寒自学python第十八天python变量的作用范围
孤荷凌寒自学python第十八天python函数的形参与变量的范围 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.在python的函数中各种不同的形式参数在定义的先后顺序上有规定: 必须 ...
- 课时1:我和python的第一次亲密接触
目录: 一.Python3的下载与安装 二.从IDIE启动Python 三.尝试点新的东西 四.为什么会这样? 五.课时01课后习题及答案 ============================== ...
- [转载]kd tree
[本文转自]http://www.cnblogs.com/eyeszjwang/articles/2429382.html k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据 ...
- PhpStorm快捷键设置/个性化设置,如何多项目共存?如何更换主题?
#常用快捷键 设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“Eclipse” -> 然后“Copy”一份 ...
- 软工实践Alpha冲刺(7/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...
- 软考——(1)J2SE
我们先从Java说起,简单的说,Java是一种面向对象的程序设计语言,可跨平台使用. 与之前学习的程序设计语言相比,最值得一提的就是Java的两种核心机制:Java虚拟机和垃圾回收机制. 1)虚拟机 ...
- 洛谷 P3168 [CQOI2015]任务查询系统 解题报告
P3168 [CQOI2015]任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组\((S_i,E_i,P_i) ...
- Windows转移FSMO角色
转移 FSMO 角色若要使用 Ntdsutil 实用工具转移 FSMO 角色,请按照下列步骤操作:1.登录到基于 Windows 2000 Server 或基于 Windows Server 2003 ...