UI第一节: UIView s和 UILabel

一. 使用Xcode创建一个文件


file -> new -> Project -> iOS Application -> Empty Application

 

2.为了手动分配内存, 需要将该项更改为NO.



3. 在AppDelegate.m中, 定义属性, 因为属性是全局性的, 可以该文件中的任意方法中使用, 如果只在某方法中定义变量, 那么该变量为局部变量, 只能在本方法内使用.


4. iPhone的各个型号的屏幕尺寸:

 /**********************  当前iPhone的屏幕尺寸  ********************/

    

    //4, 4s(3.5寸屏幕): 320 * 480 px(像素)

    //5, 5c, 5s(4寸屏幕): 320 * 568 px

    //6, 6s(4.7寸屏幕): 375 * 667 px

    //6plus, 6s plus(5.5寸屏幕): 414 * 736 px

    

    //px (像素) 是相对单位, pt是绝对单位

    /*

     4s之前: 1px = 1pt;

     4s ~ 6s: 1px = 2pt;

     6plus, 6splus: 1px = 3pt;

    */




5.

#warning 注意: 通常一个应用程序只有一个window

//创建背景颜色. 

    self.window.backgroundColor = [UIColor orangeColor];

6.

创建一个UIView对象:

UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(280, 480, 90, 100)];

/*

frame代表框架, 设置该视图的位置和大小. 

第一个参数: (280) 表示和原点水平方向的距离 

第二个参数: (480) 表示和原点竖直方向的距离

第三个参数: (90)  表示该视图的宽

第四个参数: (100) 表示该视图的高

CGRect是一个结构体, 结构体中包括CGOrigin和CGSize. CGPoint也是一个结构体, 包括blueView.frame.origin.x, (即和原点的水平方向距离)和frame.origin.y(和原点竖直方向的距离).  CGSize也是一个结构体, 包括frame.size.width(该视图的宽)和frame.size.height(该视图的高).



7.

 

    self.secondView = [[UIView alloc]initWithFrame:CGRectMake(100, 200, 200, 200)];

    

    

    center.x = frame.origin.x + frame.size.width / 2

    center.y = frame.origin.y + frame.size.height / 2

#warning Center影响view的位置 (也就是frame.origin, view尺寸(frame.size) 没有影响)

    secondView.center = CGPointMake(100, 100);


 center表示该视图的中心位置, 改变center, 即改变该视图的位置


8.

self.secondView.backgroundColor = [UIColor blackColor];

    

    [window addSubview:self.secondView];


改变视图的颜色用该视图对象调用 backgroundColor 方法,  具体颜色是UIColor类中的类方法.

将该视图添加到视图中 用父视图调用addSubview: 实现



9.bounds: 改变当前视图的坐标原点位置和宽高  

理解是: 因为视图的位置只和父视图有关, 子视图设定的x 和 y 是相对于父视图的原点而言的. 改变当前视图的坐标原点目的是为了改变它的子视图的位置. 如果没设定bounds前, 其子视图是根据父视图的左上角原点进行放置的, 那么当把父视图用bounds更改原点位置后, 其实就是将其子视图移动了相应的x 和 y.


另外需要注意的是:  第一个参数 100 是将父视图的原点水平向左移动100  ;  第二个参数 100 是将原点竖直向上移动100  

                                一般最后两个参数不作更改, 只设置前两个参数, 所以后两个参数如下代码所示.

secondView.bounds = CGRectMake(100, 100, secondView.frame.size.width,

secondView.frame.size.height);

    

#warning 注意: bounds对自身显示没有影响, 影响的是子视图的位置. bounds是将当前视图自身坐标系原点移动 (如果x, y为正数, 则向外移动. 反之向内移动).

secondView.bounds = CGRectMake(-50, -50, secondView.frame.size.width, secondView.frame.size.height);



10.

#warning 特别注意: frame的坐标相对于父视图而言

11.

#warning 将子视图插入到父视图的子视图数组中指定的位置.

    [self.secondView insertSubview:threeView atIndex:0];


12.

#pragma 将子视图添加到父视图(secondView)上, 并且插入到当前父视图的某一个子视图(firstview)上边. (后两个视图都是添加到第一个视图上得, 只不过改变他们的层级关系)


    [视图3(父视图) insertSubview: 视图1 aboveSubview: 视图2]

//将视图1 添加到视图2 上面(如果有重叠, 视图2被覆盖) 视图1和视图2的父视图都是视图3

    

    [secondView insertSubview:threeView aboveSubview:firstView];

    

  

13.

#pragma 将子视图添加到父视图(secondView)上并且插入到当前父视图的某一个子视图(firstview)下边. (后两个视图都是添加到第一个视图上得只不过改变他们的层级关系)


    [视图3(父视图) insertSubview: 视图1 belowSubview: 视图2]

//将视图1 添加到视图2 上面(如果有重叠, 视图1被覆盖) 视图1和视图2的父视图都是视图3




  [self.secondView insertSubview:threeView belowSubview:firstView];



14.

//把指定视图移到父视图的最上面  (bringSubviewToFront)

    //由父类调用 bringSubviewToFront方法

    [self.secondView bringSubviewToFront:firstView];

    

//把指定视图移到父视图的最下面 (sendSubviewToBack)

    [self.secondView sendSubviewToBack:firstView];

    

//交换两个指定下标的子视图(在指定父视图上改变, 子视图移动, 子视图的子视图也一起移动)

//(exchangeSubviewAtIndex:下标1 withSubviewAtIndex:下标2)

    //父视图中的子视图排列是一个数组, 改变子视图位置, 通过下标

    [self.secondView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];

    

//删除父视图中的某个子视图  (removeFromSuperview)

    //[threeView removeFromSuperview];

    

    

    

#warning 注意: 改变子视图层级的方法, 只针对当前一个父视图.



15.

//控制当前视图是否隐藏  属性名: hidden (默认为NO)

//如果当前视图上面有子视图, 子视图和当前视图一起隐藏. (子视图的属性值没有变, 只是父视图对子视图产生影响)

    threeView.hidden = YES;



16.

               //控制当前视图的不透明度(取值范围: 0 ~ 1, 默认为1, 1为完全不透明)

    //secondView.alpha = 0.5;

    firstView.alpha = 0.5;

#warning  注意 父视图的透明度会影响子视图 .



17.

//获取当前视图的父视图 (一个视图除了window以外一定存在父视图, 可以没有子视图)

    NSLog(@"%@", threeView.superview);

    

    

    //获取当前视图的所有子视图 (返回数组, 视图通过数组管理子视图, 先添加的子视图, 在数组的前面, 显示在最下面, 以此类推)

    //NSLog(@"%@", secondView.subviews);

    for (UIView *view in self.secondView.subviews) {

        NSLog(@"%@", view);

        

    }


18.

#pragma mark Tag: 给一个视图添加标识(相当于身份证号, 唯一), 默认值为0, 通常通过设置tag值可以起到意想不到的效果;

    

    threeView.tag = 100;

    


#pragma mark 通过tag值找到当前视图的指定子视图, 方法[superView:viewWithTag: ]

    //通过tag, 改变视图的颜色

    [self changeThreeViewColor];


//通过tag值访问视图( 由父视图调用viewWithTag: ,需要把父视图设置成属性, window是属性)

-(void)changeThreeViewColor

{

    [self.secondView viewWithTag:100].backgroundColor = [UIColor purpleColor];

}





19.
@interface


(其他的属性..)


//设置定时器

@property(nonatomic, retain) NSTimer *timer;


@end

 //0.5 = 5s  selector: 方法名(5s调用该方法) repeats:是否重复

    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changeThreeViewColor) userInfo:nil repeats:YES];

    

20.


//将定义的所有属性都释放一下

    [_redView release];

    

    [_threeView release];

    

    

    [_firstView release];

    

    

    //初始化方法, dealloc, release里使用_属性, 不使用self.属性

    [_secondView release];




21.

//window成为当前应用程序的主窗口, 并且可见 (很重要), 否则所有的视图都不会在窗口显示出来

    [self.window makeKeyAndVisible];






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值