UIView,UIViewController的使用

UIView,UIViewController的使用

上节回顾

上节课讲解了UIButton,UITextField的使用,并且综合前面讲解的UILabel的做了一个简易的登录界面。

本节内容

  1. UIView的介绍与使用
  2. UIViewController的介绍与使用
  3. 控件之间的继承关系

UIView

UIView表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为iOS中几乎所有可视化控件都是UIView的子类。负责渲染区域的内容,并且响应该区域内发生的触摸事件。

所以我们以上介绍的几个控件都是UIView的子类。我们先介绍UIView的三个结构体CGPoint,CGRect,CGSize。

  1. CGPoint
struct CGPoint {  
  CGFloat x;  
  CGFloat y;  
};  
typedef struct CGPoint CGPoint;  

CGPoint确定了view的起始坐标。
UIView的坐标是从屏幕的左上角开始,如图所示
UIView的坐标系

  1. CGSize
struct CGSize {  
  CGFloat width;  
  CGFloat height;  
};  
typedef struct CGSize CGSize;  

CGSize确定view的长宽。

  1. CGRect
struct CGRect {  
  CGPoint origin;  //偏移是相对父视图的  
  CGSize size;  
}; 
typedef struct CGRect CGRect

CGRect确定了整个视图位置和大小。就像前面讲到的UIButton中的初始化

    UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(50, 200, 100, 20)];

这里的frame就是使用CGRect确定的。
然后是UIView的一些基本属性

  1. frame
//描述当前视图在父视图中的位置和大小
@property(nonatomic) CGRect frame;
  1. bounds
//描述当前视图在其自身坐标系统中的位置和大小
@property(nonatomic) CGRect bounds;

bounds是CGRect是告诉子视图本视图的原点位置(通俗的说就是,子视图的frame的origin与父视图的bounds的origin的差,就是子视图相对于父视图左上角的位置,如果结果为负,则子视图在父视图外)

  1. center
//描述当前视图中心点在父视图中的位置
@property(nonatomic)CGPoint center;

改变frame会改变center。同理改变center也会改变frame。
frame和center都是相对于父视图的,bounds是相对于自身的。

//形变属性(平移\缩放\旋转)
@property(nonatomic)CGAffineTransform  transform;
//YES:支持多触点
@property(nonatomic,getter=isMultipleTouchEnabled)BOOL multipleTouchEnabled; //default is NO
//YES:超出控件边框范围的内容都剪掉
@property(nonatomic)BOOL clipsToBounds;
//YES:超出控件边框范围的内容都剪掉
@property(nonatomic)BOOL clipsToBounds;
//背景色
@property(nonatomic,copy)UIColor *backgroundColor;
//default is nil;
//YES:不透明 NO:透明
@property(nonatomic,getter=isOpaque)BOOL  opaque;
//default is YES
//YES:隐藏  NO:显示
@property(nonatomic,getter=isHidden)BOOL  hidden;
//内容模式
@property(nonatomic) UIViewContentMode contentMode
//default is UIViewContentModeScaleToFill

UIView中含有的元素

在这里插入图片描述
图层关系

  1. UIWindow

UIWindow是UIView的子类,它相当于一个画板,UIView则是一块画布,UIView在UIWindow上,其他的控件就相当于一幅画中的各个元素(object)。
我们在一个应用起始时需要创建一个window来防止我们的UIView
window的初始化方法(在application didFinishLauchingWithOptions里面):

self.window = [[[UIWindow alloc] 
initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.window.backgroundColor = [UIColor blueColor];
//给window设置一个背景色
[self.window makeKeyAndVisible];
//让window显示出来
  1. UIScreen
    UIScreen意如其名,它代表了屏幕,通过它我们可以获取一些我们想要的东西,比如整个屏幕的范围等等。

UIView的常用方法

  1. addSubview: 添加一个子视图并让它在最上面显示出来。
 (void)addSubview:(UIView *)view 
//添加一个子视图到接收者并让它在最上面显示出来

比如我们之前用到的

[self.view addSubview:btn];
  1. bringSubviewToFront: 把指定的子视图移动到顶层
  (void)bringSubviewToFront:(UIView *)view 
//把指定的子视图移动到顶层 
//将view往前移动一个图层(与它的前一个图层对调位置)
  1. initWithFrame: 初始化并返回一个新的拥有特定帧矩形的视图对象
(id)initWithFrame:(CGRect)aRect 
/*参数:
aRect 一个帧矩形用来创建视图对象。原始的帧在它的父视图的坐标系中。设置这个属性用来改变中心和边界属性。 
返回值: 一个初始化的视图对象,如果没有被创建那就返回nil */
  1. insertSubview:atIndex: 插入视图到指定的索引
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index 
参数: 
view 插入的视图,这个值不能是nil 
index 子视图索引从0开始并且不能大于子视图的数量 

  1. sizeToFit 调整大小并移动接收者视图大小所以他包含了他的子视图
 (void)sizeToFit 

以上是在UIView中常用的方法与属性。其他见开发者文档。

UIViewController

UIViewController是视图控制器,它由控制器+view组成。
它能够完成一下功能:

  1. 控制视图的代码逻辑,并拥有自己的视图
  2. 控制器与控制器之间的通信
  3. 视图与Model之间的传值
  4. 添加子控制器
  5. 展示界面信息
  6. 添加子控件

使用步骤

  1. 初始化
  2. 将view加载到视图中
  3. 加载完view后添加子视图或控件
  4. layout布局调整
  5. 各个控件或子视图的操作逻辑添加
  6. 销毁或调入下一界面
- (void)viewDidLoad {
    NSLog(@"%s,视图已经加载出来了",__func__);
    [super viewDidLoad];
}

我们在应用中所有的子视图或子控件的逻辑都要在视图加载完后才能实现,所以我们常用的方法就是viewDidLoad.

控件间的继承关系

首先说一下继承

  1. 使用继承可以实现代码的复用,减少代码冗余;
  2. Objective-C中一个类可以继承另一个类;
  3. 被继承的类称为父类或超类(基类);
  4. 继承的类称为子类或派生类;(孩子类);
  5. 子类可以直接拥有父类中所有允许子类继承的属性和方法;
  6. 继承关系是可以传递的)子类除了可以调用父类的方法,也可以调用父类的父类的方法,也就是说继承可以确保某个父类型之下的所有类都会有父类型所持有的全部方法;
  7. 子类可以有自己的成员变量、属性和方法;
  8. (单一继承性)Objective-C不支持多重继承。

继承的使用
继承的标识为英文的“:”冒号(),使用继承可以定义一个具有父类所有功能(成员和方法)的新类,它继承了父类的功能。
方法的重写
编写子类时,某些方法(从父类继承过来)需要自己的代码实现;
子类允许重写父类的方法,在调用子类对象的重写方法时,就会调用重写后的方法;
父类中被子类所重写的方法则在调用子类方法时被忽略;
super的使用
如果在子类中 需要调用父类的功能,可以借助super关键字;
子类中使用super发送消息时,实际上是告诉子类调用父类的方法;
如果父类没有定义该方法,则继续在继承链上查找,直到找到为止;
如果查到NSobject为止仍然未找到,则报错;
重写方法时经常会使用super关键字调用父类的方法。
控件的继承关系:
继承关系

总结

本次的内容较多,首先我们分析了UIView的作用与用法,接着我们分析了UIViewConreoller的用法。最后我们讲了控件间的继承关系及继承的作用与特点。

下节预告

UIImage与UIImageView的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值