zoukankan      html  css  js  c++  java
  • (转) view视图的放大、缩小、旋转

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

    1,代码添加控件

    例如:

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


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

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

    3.UIView的常见方法

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


    图片移动的3中方式


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

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


    2. 使用center来移动控件

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. // 以中心点来移动 (注意图片旋转后,移动的方向)  
    2. CGPoint p = self.headImageView.center;  
    3.   
    4. switch (btn.tag) {  
    5.     case kMovingDirTop:  
    6.         // 改变控件的位置  
    7.         p.y -= 20;  
    8.         break;  
    9.     case kMovingDirBottom:  
    10.         p.y += 20;  
    11.         break;  
    12.     case KMovingDirLieft:  
    13.         p.x -= 20;  
    14.         break;  
    15.     case kMovingDirRight:  
    16.         p.x += 20;  
    17.         break;  
    18.   
    19.     default:  
    20.         break;  
    21. };  
    22.   
    23. self.headImageView.center = p;  



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

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

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

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. typedef enum{  
    2.     kAdd=5,  
    3.     KRemore,  
    4.     kRotateLeft,  
    5.     kRotatelRight,  
    6. }kTranform;  


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

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    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.           
    20.     default:  
    21.         break;  
    22. };  


    2.  bounds方式,放大,缩小

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


    3.2.  frame方式,放大,缩小

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. /* 会以控件顶点来放大,缩小*/  
    2.     CGRect rect = self.headImageView.frame;  
    3.   
    4.     switch (btn.tag) {  
    5.   
    6.         case kAdd:  
    7.             rect.size.width += 20;  
    8.             rect.size.height += 20;  
    9.             break;  
    10.         case KRemore:  
    11.             rect.size.width -= 20;  
    12.             rect.size.height -= 20;  
    13.             break;  
    14.               
    15.         default:  
    16.             break;  
    17.     };  
    18.       
    19.     self.headImageView.frane = rect;  



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


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


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

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

  • 相关阅读:
    【Jmeter】 Report Dashboard 生成html图形测试报告
    【Python】更优的字符串格式化方式 -- "format"替代"%s"
    【Jmeter】压测mysql数据库中间件mycat
    UTF-8文件的Unicode签名BOM(Byte Order Mark)问题记录(EF BB BF)
    【Python】常用排序算法的python实现和性能分析
    【Python】模块学习之Timer定时任务,递归定时自调获取博客浏览量
    博客园文章添加阅读目录及CSS样式的方法总结
    【Python】解决Python脚本 在cmd命令行窗口运行时,中文乱码问题
    【Python】模块学习之locust性能测试
    【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件
  • 原文地址:https://www.cnblogs.com/lizhitai/p/4517248.html
Copyright © 2011-2022 走看看