OCUI界面设计:视图与视图控制器
来源:互联网 发布:裁剪人物图片的软件 编辑:程序博客网 时间:2024/05/22 13:21
视图(UIView)
基本介绍
UIView是基本的视图类,表示屏幕上的一块矩形区域。
UIView用于展示内容以及接收用户交互事件。
UIView可以管理其下显示的所有的子视图。
屏幕坐标系:
iOS设备以屏幕左上角为坐标原点,水平向右为X轴正方向,竖直向下为Y轴正方向。
视图层次、大小和位置
- subview在显示到屏幕上时,是位于superview 上面的,同一个view中的subview是按照嵌入顺序显示的,越晚加入的subview显示在越上层 ,可以通过tag值从父视图中找到对应的视图。
- (UIView *)viewWithTag:(NSInteger) aTag;
frame属性是边框矩形,用于指定视图相对于其父视图坐标系统的位置 和大小(相对于父视图),bounds属性是边界矩形,负责定义视图相对于本地坐标系统的位置和 大小(相对于本身),center属性是边框矩形的中心点。
一些有用的Core Graphic数据结构以及对应的创建方法:
点:CGPoint 创建方法:CGPointMake(x, y) 尺寸:CGSize 创建方法:CGSizeMake(width, height) 矩形区域:CGRect 创建方法:CGRectMake(x, y, width, height) 字面量初始化赋默认值: CGRectZero == CGPointMake(0, 0) CGSizeZero == CGSizeMake(0, 0) CGPointZero == CGRectMake(0, 0, 0, 0) CGRectGetWidth() :获取某个视图的宽度 CGRectGetHeight():获取某个视图的高度 CGRectGetMidX():获取某个视图X轴中心点 CGRectGetMidY():获取某个视图Y轴中心点 CGRectGetMaxX():获取某个视图X轴最大点 CGRectGetMaxY():获取某个视图Y轴最大点 CGRectGetMinX():获取某个视图X轴最小点 CGRectGetMinY():获取某个视图Y轴最大点
视图属性
autoresizeSubviews:默认是YES,自动调整子视图大小
autoresizingMask:父视图改变的时候自己如何跟着变化
backgroundColor:背景颜色
hidden:是否隐藏
multipleTouchEnabled:是否支持多点触摸
subviews:所有子视图(NSArray类型)
superview:父视图
userInteractionEnabled:是否接收交互
alpha:透明度(CGFloat)
frame:相对父视图的位置和大小(CGRect)
bounds:相对自己的位置和大小(CGRect)
center:相对父视图的中心点(CGPoint)
clipsToBounds:超出父视图部分不显示
transform:变换属性(CGAffineTransform)
window:当前view所在的window
tag:区分标识(NSInteger)
layer:视图层(CALayer),通过视图层可设置视图的边框宽度、边框颜色、阴影等。
视图操作
- 视图初始化:
- (instancetype)initWithFrame:(CGRect)frame;
- 添加视图:
- (void)addSubview:(UIView *)view;
- 插入视图:
// 插入到指定位置- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;// 插入到指定视图下方- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;// 插入到指定视图上方- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- 整理视图
// 将某个视图置于顶部- (void)bringSubviewToFront:(UIView *)view;// 将某个视图置于底部- (void)sendSubviewToBack:(UIView *)view;// 交换视图位置- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- 移除视图
// 移除子视图- (void)removeFromSuperview;
// 遍历移除某一个视图上的所有子视图 for (UIView *view in self.view.subviews) { [view removeFromSuperview]; }
视图封装
对于一些重用性比较高的视图我们可以封装起来,在以后的开发过程中需要用到的时候可直接导入使用,极大提高编码效率;其次,视图封装有着可分化减少文件代码量等等好处。
UIView是所有视图的父类,对于视图封装而言,我们一般又叫自定义UIView,因此,视图的封装是封装在UIView上的,要封装视图,我们需子类化UIView。
视图封装方法
steps 1:创建一个UIView的子类;选中工程目录 -> 按command + n新建文件 -> 选择iOS中Source目录下的 Cocoa Touch Class -> 在设置面板中输入Class类名CustomView(根据需要命名),Subclass选择UIView。
steps2:在CustomView.m文件中重写initWithFrame初始化方法。
#import "CustomView.h"@implementation CustomView- (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // 此处自定义视图... // 获取self的宽度和高度(在外部调用的时候赋值) CGFloat width = self.bounds.size.width; CGFloat height = self.bounds.size.height; // 添加按钮控件 UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; button.bounds = CGRectMake(0, 0, width / 3, 30); button.center = CGPointMake(width / 2, height / 2); [button setTitle:@"自定义视图中的按钮控件" forState:UIControlStateNormal]; // 添加按钮到自定义视图中,直接用self调用,因为self就是CustomView,就是一个视图。 [self addSubview:button]; } return self;}@end
视图控制器(UIViewController)
基本介绍
视图控制器封装了一个UIView,并且管理某个页面区域的所有视图。
视图控制器是模型和视图之间的媒介,模型和视图通过视图控制器来交互
多种类的控制器:UIViewController、UINavigationController、 UITabBarController。
视图控制器提供了多种的界面响应方法,及界面生命周期方法,如监控界面旋转、界面加载等。
视图控制器生命周期
// 加载视图,只调用一次。- (void)loadView{ [super loadView]; NSLog(@"%@", NSStringFromSelector(_cmd));}// 视图加载完成,一般在这个方法中初始化用户界面,只调用一次。- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@", NSStringFromSelector(_cmd));}// 视图将要显示,视图将要出现的时候调用。- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"%@", NSStringFromSelector(_cmd));}// 视图已经显示,视图出现的时候调用 。- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSLog(@"%@", NSStringFromSelector(_cmd));}// 视图将要消失,视图将要消失的时候调用。- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; NSLog(@"%@", NSStringFromSelector(_cmd));}// 视图已经消失,视图消失的时候调用。- (void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; NSLog(@"%@", NSStringFromSelector(_cmd));}
常用属性和方法
view:视图控制器的根视图
title:视图控制器的标题
interfaceOrientation:朝向(只读属性)
initWithNibName:bundle::指定初始化方法
界面跳转
界面跳转:界面与界面之间的跳转。
- 模态切换,推送:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion;
- 模态切换,返回:
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
关键属性:
presentedViewController:获取下一个控制器(推送到的某一个控制器);
presentingViewController:获取上一个控制器(推送到某一个控制器的控制器);
只有控制器与控制器之间才能进行模态切换,不能通过一个视图模态切换到一个视图控制器,也不能通过一个视图控制器模态切换到视图。
界面跳转动画,设置转场效果,需要设置视图控制器的
modalTransitionStyle
属性。
- OCUI界面设计:视图与视图控制器
- OCUI界面设计:滚动视图与表格视图嵌套布局
- OCUI界面设计:网页视图 UIWebView
- OCUI界面设计:UIPickerView 拾取视图
- OCUI界面设计:滚动视图与分页控件初探
- OCUI界面设计:表格视图-初级使用
- OCUI界面设计:表格视图-高级使用
- OCUI界面设计:导航控制器
- OCUI界面设计:标签控制器
- OCUI界面设计:滚动视图与分页控件结合NSTimer实现图片自动循环与无限滚动展示
- L002-视图与视图控制器
- UI_视图与视图控制器
- OCUI界面设计:触摸与手势
- 视图控制器与通知
- 【zendframework】控制器与视图
- 视图生命周期与视图控制器关系
- 第二章 视图与视图控制器
- IOS视图生命周期与视图控制器关系
- iPad 2硬件评测:从CPU/GPU性能说开去…
- python基础学习笔记<进阶>
- 深度详解新iPad八核GPU
- iPad Air 2完全评测:可怕的三核CPU、六核GPU
- 苹果新Metal API实测:四倍完爆OpenGL ES
- OCUI界面设计:视图与视图控制器
- 关于OpenGL ES版本
- 8.6学习总结
- OpenGL ES iOS Device Hardware GPU Information
- OpenGL ES iOS Device Compatibility
- iOS devices Metal Programming Guide
- OpenGL ES Programming Guide for iOS
- OpenGL的版本历史和发展
- 做好自已,战胜自已