11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)
目录:
1. Storyboard
1.1 静态表视图
1)Section可以增加、删除、修改头脚文字
2)Cell可以增加、删除、调整类型、修改文字、修改辅助视图类型
3) 自定义accessoryView:
将需要做辅助视图的控件拖拽到VC下的小黑条
选择Cell,第6个检查器,连线accessoryView到小黑条上的控件
4)自定义Cell
拖拽一个Cell或选择一个已有的Cell
检查器4中将Style设置为Custom
拖拽需要的控件到Cell中
5) 调整TableView的高度
选择场景, 检查器4 Size-->freeForm
从左侧选择TableView, 检查器5 View-->Height 修改此值
6) 增加Cell
从右侧对象库中拖拽一个Cell到TableView
7) 头视图
tableView.tableHeaderView
直接拖拽一个视图到表头
8) 复制Cell
Command+C Command+V
9) 跳转
选中你要从哪个Cell跳转
直接拉线到新的场景
10)需要增加自定义Cell中的控件代码时,需要再定义一个类
1>定义TableViewController类,继承UITableViewController
2>删除datasource和delegate协议规定的所有相关方法,否则不会显示静态的Cell
3>选择场景,在检查器3绑定类
4>增加Cell中的控件需要的代码(连接属性,定义方法)
1.2 动态表视图
1) 系统Cell原型
拖拽一个TableViewController后,选择Cell原型,在Style中选择一种系统样式(总共有4种)
给原型起名字: identifier属性
在代码中dequeue时,使用起的名字即可,保证一定会成功创建Cell对象
2) 自定义Cell原型
1>创建时和系统原型做法一样,但是Style选择Custom
2>定义一个Cell类,在检查器3中绑定这个类
3>根据实际需要拖拽自定义的控件到类中形成属性
4>给自定义的Cell起名, identifier属性
5>创建TableViewController类, 将场景绑定到此类
6>在TableViewController中就可以dequeue自定义的Cell用了
3) 混合Cell原型
在一个TableView中存在多个Cell原型, 这些原型可以是系统原型,也可以是自定义原型
自定义Cell在Storyboard中仅限于当前TableView使用,如果在其他TableView中重用的话,就需要拷贝。
有时候,一个自定义的Cell希望在多个场景中使用,那么就将此Cell单独定义成xib文件。
2. Views
绘制 quartz 2D
底层图形绘制技术,功能强大,难以掌握,不是面向对象,全部都是C语言API
贴图 美化
手势
变形
布局
动画
3. View的基本概念介绍
3.1 view层主要负责
根据Controller的配置,提供显示界面
负责和用户交互
3.2 图型和图像
显示器
上面有很多显像晶体,每一个晶体可以显示三种颜色(红绿蓝)
三种颜色的亮度不同,会合成各种不同的颜色
有1280x800个显像晶体,显示器支持的像素1280x800
像素: 一张图片的像素3200x2000
这张图片有3200x2000个颜色信息
R 0~255 1Byte 100
G 0~255 1Byte 150
B 0~255 1Byte 200
3200x2000x3Byte
图像划分:
位图(bitmap), 点阵图
可以用一个二维数组来保存数据
RGB组成每一个点
有自己的分辨率, 放大后就能看到点
这种图一般会进行压缩: png(无损压缩),jpg(有损压缩),gif,bmp(不压缩)
矢量图
一般是几何图形, 曲线,直线,圆,半径, 阴影
可以用代码写出这种图
放大和缩小不会失真
quartz 2D
4. 绘制图形
4.1 绘制代码写在View中
Controller ----> viewDidLoad
View ----> drawRect
需要自己写视图类,覆盖drawRect方法,在此方法中进制绘制
4.2 绘制的基本步骤:
1) 获取画布
1.5) 保存上下文状态
2) 勾勒
3) 着色
3.5)恢复上下文状态
// 1.获取画布
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context); // 保存目前上下文状态
// 2.勾勒
CGContextMoveToPoint(context, , );
CGContextAddLineToPoint(context, , );
CGContextAddLineToPoint(context, , );
CGContextAddLineToPoint(context, , );
// 3.着色
[[UIColor redColor] setFill]; // 设置填充颜色
[[UIColor greenColor] setStroke]; // 设置描边颜色
CGContextDrawPath(context, kCGPathFillStroke);
// 恢复状态
CGContextRestoreGState(context);
[Demo3]
拖拽一个UIView到view里,然后将UIView的类型设置成我们自己的TRView类型。
注意: drawRect方法永远是自动调用的,程序员不能主动去调用drawRect方法。
如果需要刷新界面, 向view发消息:setNeedDisplay, 系统会去调用drawRect方法进行界面的重新显示。
5. UIBezierPath
5.1 Bezier 贝塞尔曲线
5.2 干什么用
用于包装绘制的C语言API,使之成为面向对象代码
5.3frame 和bounds初步
frame 代表一个视图的坐标,此坐标保存了相对于父视图的位置
bounds代表一个视图自身的坐标
一般情况下,bounds中的size和frame中的size相同,而bounds中的origin永远为0
5.4 UIBezierPath中的三个属性:
.lineWidth 线宽
.lineCapStyle 线终点的风格
.lineJoinStyle 两条线连接的风格
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
// 贝塞尔曲线
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(, )];
[path addLineToPoint:CGPointMake(, )];
[path addLineToPoint:CGPointMake(, )];
[path addLineToPoint:CGPointMake(, )];
[[UIColor redColor] setFill];
[[UIColor greenColor] setStroke];
[path fill];
[path stroke];
CGContextRestoreGState(context);
5.5 画弧线
- (void)drawRect:(CGRect)rect
{
// Drawing code
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(, )];
[path addLineToPoint:CGPointMake(, self.bounds.size.height - )];
[path addLineToPoint:CGPointMake(self.bounds.size.width - , )];
//[path closePath];
[[UIColor redColor] setFill];
[[UIColor blueColor] setStroke];
path.lineWidth = ;
path.lineJoinStyle = kCGLineJoinRound;
path.lineCapStyle = kCGLineCapRound;
[path fill];
[path stroke];
CGContextRestoreGState(context);
}
作业:
1. 画一个圆角矩形
四个圆角的半径必须一样
// 圆角巨型
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
UIBezierPath *path = [UIBezierPath bezierPath];
[path addArcWithCenter:CGPointMake(, ) radius: startAngle:M_PI endAngle:M_PI * 1.5 clockwise:YES];
[path moveToPoint:CGPointMake(, )];
[path addLineToPoint:CGPointMake(, )];
[path addArcWithCenter:CGPointMake(, ) radius: startAngle:M_PI *1.5 endAngle:M_PI * clockwise:YES];
[path addLineToPoint:CGPointMake(, )];
[path addArcWithCenter:CGPointMake(, ) radius: startAngle: endAngle:M_PI_2 clockwise:YES];
[path addLineToPoint:CGPointMake(, )];
[path addArcWithCenter:CGPointMake(, ) radius: startAngle:M_PI_2 endAngle:M_PI clockwise:YES];
[path addLineToPoint:CGPointMake(, )];
[[UIColor redColor] setStroke];
[path stroke];
CGContextRestoreGState(context);
11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)的更多相关文章
- Android view的测量及绘制
讲真,自我感觉,我的水平真的是渣的一匹,好多东西都只停留在知道和会用的阶段,也想去研究原理和底层的实现,可是一看到代码就懵逼了,然后就看不下去了, 说自己不着急都是骗人的,我自己都不信,前两天买了本& ...
- OpenGL学习进程(11)第八课:颜色绘制的详解
本节是OpenGL学习的第八个课时,下面将详细介绍OpenGL的颜色模式,颜色混合以及抗锯齿. (1)颜色模式: OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. R ...
- Windows App开发之编辑文本与绘制图形
编辑文本及键盘输入 相信大家都会使用TextBox,但假设要让文本在TextBox中换行该怎么做呢?将TextWrapping属性设置为Wrap,将AcceptsReturn属性设置为True就好咯. ...
- 在Android中使用OpenGL ES进行开发第(三)节:绘制图形
一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...
- WPF2D绘制图形方法
我们先看看效果如何: xaml文件: <Window x:Class="WPF2D绘制图形方法.MainWindow" xmlns="http://schemas. ...
- OpenGL学习进程(8)第六课:点、边和图形(三)绘制图形
本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识: (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”. ...
- OpenGL学习进程(4)第二课:绘制图形
本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形: (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) ...
- Quartz 2D(常用API函数、绘制图形、点线模式)
Quzrtz 2D 绘图的核心 API 是 CGContextRef ,它专门用于绘制各种图形. 绘制图形关键是两步: 1.获取 CGContextRef ; 2.调用 CGContextRef 的方 ...
- CSS图形基础:纯CSS绘制图形
为了在页面中利用CSS3绘制图形,在页面中定义 <div class="container"> <div class="shape"> ...
随机推荐
- Memory Architecture-SGA-Database Buffer Cache
启动instance:1.分配内存空间SGA 2.启动后台进程 内存结构:1.SGA 2.PGA 3.UGA 4.Software code areas SGA components:1.Databa ...
- ADO.NET(一)
- MBProgressHUD简单使用
使用HUD最多的情形用于请求等待提示 例如做登录的时候在确认登陆的时候可以用HUD提示正在登陆. 最基本的使用 初始化 //self.view代表在哪个view中显示hud MBProgressHUD ...
- C++对象的销毁
- JDBC_获取插入记录的主键值
<span style="font-size:24px;">package src.com.JDBC2DAO.java; import static org.junit ...
- spoj 3871 gcd extreme
题目大意给出一个n,求sum(gcd(i,j),<i<j<=n); 可以明显的看出来s[n]=s[n-]+f[n]; f[n]=sum(gcd(i,n),<i<n); 现 ...
- linux分区工具fdisk的使用
fdisk是linux下的一块分区工具,使用简单方便,由于是对系统进行修改,需要root权限. 常用参数如下: fdisk -l : 列出所有的硬盘信息 直接传入设备名称可进入对该硬盘分区.例如,f ...
- QtInternal 之 高效使用QString(使用QLatin1String,QStringRef,QStringBuilder,QStringMatcher等相关类)
注意:本文翻译自 http://developer.qt.nokia.com 中的 UsingQStringEffectively ,中文译文见 简体中文版 ,如果你对翻译wiki感兴趣 ...
- 基于visual Studio2013解决C语言竞赛题之0306分数转换
题目 解决代码及点评 根据题目要去,我们可以通过if实现该功能,伪代码如下: if(a > 90) print 'A' else if(a>80) print 'b' else ...
- hadoop、spark/storm等大数据相关视频资料汇总下载
小弟不才,工作中也用到了大数据的相关东西.一開始接触的时候,是通过买来的教学视频入的门.这两天整理了一下自己的视频资料.供各位进行下载. 文档截图: