ios view的frame和bounds以及center, 手写控件

一.注意点

在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力!

提示:

    1> 按钮addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方方法

二. frame和bounds以及center属性

  1.frame和bounds以及center属性

      frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
      bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点)
      center:该view的中心点在父view坐标系统中的位置和大小。(参照是,父亲的坐标系统)
 
      每个view都有一个本地坐标系统。这个坐标系统作用比较重要,比如触 摸的回调函数中的UITouch里面的>坐标值都是参照这个本地坐标

      系统的坐标。当然bounds这个属性也是参照这个本地坐标系统来的。其实本地 坐标系统的关键就是要知道的它的原点(0,0)在什么位置

    (这个位置又是相对于上层的view的本地坐标系统而言的,当然最上面的一层view就是 window它的本地坐标系统原点就是屏幕的左上角了)。

      通过修改view的bounds属性可以修改本地坐标系统的原点位置。
 
      所以,bounds影响到子view的位置和大小。如图解释:

        

 

  2. 打印这个三个属性的值得方法

      frame用法:
            //获取yellowView的frame(坐标和大小)
           CGRect yellowFrame = self.yellowView.frame;
 
            //传入一个CGRect类型的数据,将它转换成一个字符串
            NSString *frameStr = NSStringFromCGRect(yellowFrame);
 
           //CGRect是由CGPoint和CGSize组成。
           CGPoint origin = yellowFrame.origin;
           CGSize size = yellowFrame.size;
      center 和 bounds的用法:
              //Center属性
             CGPoint center = self.yellowView.center;
            NSLog(@"%@",NSStringFromCGPoint(center));
 
            //bounds属性。bounds的xy默认值是(0,0)
             CGRect bounds = self.yellowView.bounds;
             NSLog(@"bounds = %@",NSStringFromCGRect(bounds));

三.实现简单动画

   简易动画大致有2种方式:

     1. 首尾式动画:  

         调用UIView的类方法 beginAnimations:nil context:nil
              这里写需要动画的代码。
              配置动画(时长)

        提交动画。调用UIView的类方法  commitAnimations    单词:animation:动画,兴奋

         伪代码:

      [UIView beginAnimations:nil context:nil];

        /** 需要执行动画的代码 **/

      [UIView commitAnimations];

     2. block动画
         使用UIView的类方法
           [UIView animateWithDuration:动画时长 animations:^{
               //需要动画的代码
            }];
         伪代码:

    [UIView animateWithDuration:0.5 animations:^{

        /** 需要执行动画的代码 **/

    }];

  3.帧动画

       //1 设置图片的动画数组
    self.iconImage.animationImages = arrs;
  //2 开始动画.先设置属性再开始动画
    [self.iconImage setAnimationDuration:2];
    [self.iconImage setAnimationRepeatCount:1]; //设置动画的重复次数
    [self.iconImage startAnimating];  //开始执行动画

四.补充笔记:

1. 修改对象的结构体成员

在OC中,不允许直接修改“对象”的“结构体属性”的“成员”,但是允许修改“对象”的“结构体属性”

修改结构体属性的成员方法如下:

(1)使用临时变量记录对象的结构体属性

(2) 修改临时变量的属性

(3)将临时变量重新设置给对象的结构体属性

 2. 在程序开发中需要避免出现魔法数字(Magic Number)

使用枚举类型,可以避免在程序中出现魔法数字

(1)枚举类型实质上就是一个整数,其作用就是用来替代魔法数字

(2)枚举类型中,指定了第一个整数之后,后面的数字会递增

 3.代码实现:

    这个不能赋值: CGFloat y = self.iconButton.frame.origin.y;
     y -= 10;
     self.iconButton  //oc对象
     self.iconButton.frame  //OC对象的一个结构体属性  [注意到这里时可以赋值的]
     self.iconButton.frame.origin   不能再进行赋值,语法规范
     self.iconButton.frame.origin.y = y;
 
          为什么呢:这个是语法规范规定的
 
    这个方法可以赋值:
     //1 获取头像按钮最原始的frame
     CGRect originFrame = self.iconButton.frame;
     //2 修改frame里的y值
     originFrame.origin.y -= 10;
     //3 把修改后的frame重新赋值给头像按钮
     self.iconButton.frame = originFrame;
    注意;center和bounds的坐标的修改和上面的一样。

posted @ 2016-04-20 00:15  <瑾瑜>  阅读(182)  评论(0)    收藏  举报