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的更多相关文章

  1. CS193p Lecture 11 - UITableView, iPad

    UITableView 的 dataSource 和 delegate dataSource 是一种协议,由 UITableView 实现,将 Model 的数据给到 UITableView: del ...

  2. CS193p Lecture 10 - Multithreating, UIScrollView

    Multithreating(多线程) 网络请求例子: NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithStrin ...

  3. CS193p Lecture 9 - Animation, Autolayout

    Animation(动画) Demo Dropit续 Autolayout(自动布局) 三种添加自动布局的方法: 使用蓝色辅助虚线,右键选择建议约束(Reset to Suggested Constr ...

  4. CS193p Lecture 8 - Protocols, Blocks and Animation

    一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...

  5. CS193p Lecture 6 - UINavigation, UITabBar

    抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...

  6. CS193p Lecture 5 - View Controller Lifecycle

    1. UITextView @property(nonatomic,readonly,retain) NSTextStorage *textStorage 是 NSMutableAttributedS ...

  7. CS193p Lecture 4 - Foundation, Attributed Strings

    消息机制 调用一个实例(instance)的方法(method),就是向该实例的指针发送消息(message),实例收到消息后,从自身的实现(implementation)中寻找响应这条消息的方法. ...

  8. pytorch深度学习书、论坛和比赛地址

    pytorch深度学习书.论坛和比赛地址 待办 https://zhuanlan.zhihu.com/p/85353963 http://zh.d2l.ai/ https://discuss.gluo ...

  9. [C2P3] Andrew Ng - Machine Learning

    ##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...

随机推荐

  1. 三轴陀螺仪与加速度计如何辅助 iPhone 定位的

    在所有之前解释一下陀螺仪 根据Wiki的定义:「陀螺仪是用于测量角度或维持方向的设备,基于角动量守恒原理.」 这句话的要点是测量角度或维持方向,这是 iPhone 4 为何搭载此类设备的原因.机械陀螺 ...

  2. bzoj 1901: Zju2112 Dynamic Rankings【整体二分+树状数组||主席树+树状数组】

    整体二分: 对于每一个修改操作,标记为1,并且加一个标记为-1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和-1的操作都在树状数组对应位 ...

  3. js对象—类型和属性特性

    前言 权威指南中摘要的,工作中用不到的,重要的js基础. 三类对象两类属性 内置对象(native object) 是由ECMScript规范定义的对象或者类.例如:函数,数组,日期,正则... 宿主 ...

  4. typescript学习笔记(三)---接口

    关于第二章的学习笔记是变量声明. 接口:TypeScript的核心原则之一是对值所具有的结构进行类型检查. 它有时被称做“鸭式辨型法”或“结构性子类型化”. 在TypeScript里,接口的作用就是为 ...

  5. Spring security + oauth2.0 + redis + mybatis plus 搭建微服务

    上个星期一个朋友请求帮忙,让我搭建一个分布式授权中心的微服务,之前我也没搭建过,在网上撸了几天前辈们写的技术博客,搞出个模型,分享给大家: 前辈们博客地址: OAuth2.0 原理:https://b ...

  6. shell学习(1)

    #!/bin/bash #######read从屏幕输入######## echo "what is your name?" read PERSON echo "Hell ...

  7. 应用日志获取-web系统

    1 场景 应用使开发写的,但应用使部署再服务器上,而开发没有ssh登陆服务器的权限. so,开发总是请运维查日志,下载日志. so and so,运维要花很多时间帮开发去搞日志. 这是件很没意义的事, ...

  8. Day2课后作业:三级菜单简单版

    menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, '谷歌':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{ ...

  9. Metasploits之ms10_018

    漏洞详情:https://technet.microsoft.com/library/security/ms10-018 一准备: 1:kali Linux系统 192.168.195.129 2:W ...

  10. CSS修改Autocomplete样式

    举个场景:在用户登录成功的时候,浏览器有时候会咨询你是否记住密码,当你记住密码下次登录的时候,标签会自动填充,但是这样会造成样式不统一,解决办法如下: input:-webkit-autofill, ...