分享

IOS代码添加控件,控件移动,放大,缩小,旋转

 quasiceo 2015-04-24
分类: IOS 2014-05-24 22:02 1676人阅读 评论(0) 收藏 举报

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


1,代码添加控件

例如:

  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(2020100100); // 设置控件的位置,大小  
  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中
  1. @property(nonatomic,readonlyUIView *superview; // 获得自己的父控件对象  
  2.   
  3. @property(nonatomic,readonly,copyNSArray *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的常见方法
  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方式来移动图片 (最常用)
  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.transform0, -20);  
  13.             break;  
  14.         case kMovingDirBottom:  
  15.             self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform020);  
  16.             break;  
  17.         case KMovingDirLieft:  
  18.             self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, -200);  
  19.             break;  
  20.         case kMovingDirRight:  
  21.             self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform200);  
  22.             break;  
  23.               
  24.         default:  
  25.             break;  
  26.     };  

2. 使用center来移动控件
  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来控制控件位置

  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种方式)
  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.transform1.21.2);  
  6.         break;  
  7.     case KRemore:  
  8.         self.headImageView.transform = CGAffineTransformScale(self.headImageView.transform0.80.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方式,放大,缩小
  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方式,放大,缩小
  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属性可以修改控件的位移(位置)、缩放、旋转
主题推荐
移动 控件 ios 图片 对象
猜你在找
查看评论

  暂无评论

发表评论
  • 用 户 名:
  • ilvu999
  • 评论内容:
  • 插入代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多