CS193p Lecture 7 - Views, Gestures
Views
如何绘制自定义图像
Gestures
如何处理用户手势操作
Views
1、它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件;
2、它是分层级的,可以在视图中嵌套视图;
3、一个视图只有一个父视图,但可以有多个子视图,视图就是一个个的矩形,可以重叠;
4、UIWindow,所有视图都展示在其中
iOS只有一个UIWindow(不像Mac application)
self.view.window
5、
添加子视图
(void)addSubview:(UIView *)aView;
移除子视图
(void)removeFromSuperview;
6、每个UIViewController都有一个属性
@property (nomatic, strong) UIView *view;
self.view是UIViewController的顶级UIView
当View Controller创建时,这个view就被关联起来了

如图,这个名为view的outlet就关联到View
7、常用的初始化模版
- (void)setup{...}
- (void)awakeFromNib{ [self setup];}
- (void)initWithFrame:(CGRect)aRect{
self = [super initWithFrame:aRect];
[self setup];
return self;
}
- 初始化的操作在setup方法中定义;
- 然后首先是要重写指定初始化方法,在其中调用setup;
- 其次,需要在awakeFromNib中也调用setup,原因是当一个UIView从storyboard中释放时,调用的是awakeFromNib;如果是通过alloc、init...来初始化的话,那么调用的是指定初始化方法initWithFrame;aRect制定了在父视图中的相对位置;
CGFloat
浮点数,用来表示图像大小、坐标
CGPoint
CGFloat x, y;
CGSize
CGFloat width, height;
CGRect
CGPoint origin; CGSize size;
坐标原点在左上角;
绘制的单位都是点,而不是像素点;
(Retina屏每个点=2像素点,非Retina屏每个点=1像素点)
3个与location和size有关的属性
(CGRect) frame:视图在父视图坐标中的位置和大小;
(CGRect) bounds:视图在视图本身坐标中的位置和大小;(位置就是原点(0,0))
(CGPoint) center:视图在父视图坐标中的中心点;
注意:
frame和bounds的差别不仅仅是原点不一样,当view旋转时,要包容视图的矩形变的比原视图要大,所有frame可以这样理解:它是在你的父视图坐标系中包含你的一个矩形;
Create view in XCode
先拖出一个通用视图,然后到标示符检察器(identity inspector),修改它的类;(与创建一个自定义ViewController类似)
Create view in code
alloc & initWithFrame: (CGRect frame)
或者 alloc & init (等同于 frame 为 CGRectZero,CGRectZero是原点、长、宽都为0)
drawRect : is invoked automaticall, never call it directly!!
drawRect是由系统调用的,用户不要自行调用;
When a view needs to be redrawn,use:
- (void)setNeedsDisplay;
1、Quartz库:Core Graphics
很多C函数,都是以CG开头,以context上下文作为第一参数
2、UIBezierPath类
可以绘制复杂形状组成一个大大路径,然后对其进行描边(stroke)或者填充(fill)
Core Graphics的基本流程
1. Get a context to draw into
2. Create path
3. Set colors, fonts, textures, linewidths, linecaps, etc.
4. Stroke or fill above-created paths
UIBezierPath类封装了上述全部过程
第一步:设置context上下文(相当于一张画布)
如果使用UIBezierPath来绘制,则不需要获取context,系统会自动获取;
若不得已要用CG函数来绘制,获取context的方法:
CGContextRef context = UIGraphicsGetCurrentContext();
举个
CS193p Lecture 7 - Views, Gestures的更多相关文章
- CS193p Lecture 11 - UITableView, iPad
UITableView 的 dataSource 和 delegate dataSource 是一种协议,由 UITableView 实现,将 Model 的数据给到 UITableView: del ...
- CS193p Lecture 10 - Multithreating, UIScrollView
Multithreating(多线程) 网络请求例子: NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithStrin ...
- CS193p Lecture 9 - Animation, Autolayout
Animation(动画) Demo Dropit续 Autolayout(自动布局) 三种添加自动布局的方法: 使用蓝色辅助虚线,右键选择建议约束(Reset to Suggested Constr ...
- CS193p Lecture 8 - Protocols, Blocks and Animation
一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...
- CS193p Lecture 6 - UINavigation, UITabBar
抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...
- CS193p Lecture 5 - View Controller Lifecycle
1. UITextView @property(nonatomic,readonly,retain) NSTextStorage *textStorage 是 NSMutableAttributedS ...
- CS193p Lecture 4 - Foundation, Attributed Strings
消息机制 调用一个实例(instance)的方法(method),就是向该实例的指针发送消息(message),实例收到消息后,从自身的实现(implementation)中寻找响应这条消息的方法. ...
- pytorch深度学习书、论坛和比赛地址
pytorch深度学习书.论坛和比赛地址 待办 https://zhuanlan.zhihu.com/p/85353963 http://zh.d2l.ai/ https://discuss.gluo ...
- [C2P3] Andrew Ng - Machine Learning
##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...
随机推荐
- Mybatis分页中遇到的坑3
Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析 相关文章 Mybatis 解析配置文件的源码解析 Mybatis 类型转换源码分析 Mybatis 数据源和数 ...
- iOS 7:漫谈#define 宏定义(转)
iOS :漫谈#define 宏定义 #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步 ...
- Day2课后作业:三级菜单简单版
menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, '谷歌':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{ ...
- Codeforces Round #532(Div. 2) A.Roman and Browser
链接:https://codeforces.com/contest/1100/problem/A 题意: 给定n,k. 给定一串由正负1组成的数. 任选b,c = b + i*k(i为任意整数).将c ...
- Solr的SolrCloud与Master-slave主从模式对比
第一印象 SolrCloud是Solr4.0引入的,主要应对与商业场景.它很像master-slave,却能自动化的完成以前需要手动完成的操作.利用ZooKeeper这个工具去监控整个Solr集群,以 ...
- centos7安装iptables
使用CentOS 7时发现使用iptables防火墙时提示错误Unit iptables.service failed to load,意思是防火墙运行启动失败了,那么要如何处理呢. 一直用Cen ...
- Web 前端开发代码规范(基础)
一. 引言 对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护. 二. HTML/CS ...
- Oracle Data Integrator 12c 安装(ODI安装)
Oracle Data Integrator 12c 安装(ODI安装) 企业版安装步骤(包含独立安装步骤) 官网下载Oracle Data Integrator 12cR2 (12.2.1.0.0) ...
- 详解ASP.NET缓存机制
文中对ASP.NET的缓存机制进行了简述,ASP.NET中的缓存极大的简化了开发人员的使用,如果使用得当,程序性能会有客观的提升.缓存是在内存存储数据的一项技术,也是ASP.NET中提供的重要特性之一 ...
- Open edX 配置 O365 SMTP
配置LMS/Studio SMTP: 用到的文件如下:以下设置采用的root用户进行 /edx/app/edxapp/lms.env.json #|env文件 里包含一些功能开关 /edx/app/e ...