斯坦福iOS7公开课7-9笔记及演示Demo
这一部分主要介绍了iOS的绘图、手势、协议、block、力学特效动画(包括重力、碰撞、吸附等)以及自动布局的内容。
1、绘图、手势
(1)调用一个自定义的UIView时,可以使用awakeFromNib方法做一些初始化工作。

(2)iOS中绘图需要了解的常用测量单位:
CGFloat:浮点值,与float一样;
CGPoint、CGSize、CGRect是三个结构体分别代表游XY坐标描述的店、宽度高度描述的大小值以及由原点坐标、宽度高度描述的矩形,度量单位都是CGFloat。

(3)自定义的UIView实现文件中有一个drawRect方法,给我们提供了重新绘制UIView的入口,通过重写这个方法来更新我们的UIView,但是苹果要求开发者使用setNeedsDisplay这个方法去通知系统调用drawRect进行重绘,而不是直接调用。

(4)iOS给开发者提供了UIBezierPath类,实现通过直线或曲线等方式构造绘制图形
(5)绘制图形时的坐标系参考,原点是在左上角,bounds指View本身矩形所组成的坐标系,frame指View外包矩形组成的坐标系,center坐标指View的中心点在父视图坐标系中的坐标值。

(6)手势,系统已经对手势进行了封装,可以直接使用,两种使用方法:
一种是添加手势到Interface Builder中,然后将其连接到实现文件中,对手势进行处理。

还有一种方法是在代码中直接添加,提前(比如在ViewDidLoad中)addGestureRecognizer,指明手势响应函数,实现函数方法。


(7)对于手势的状态,首先分为不连续手势和连续手势,不连续手势比如点击手势Tap,只有一种状态Recognized,代表接触屏幕那一刻被识别到了。对于不连续手势,比如捏合缩放手势pinch,手势进行的过程中有Began、Failed、Changed、Cancelled状态。这些状态对实现手势处理方法很关键,当手势已经开始执行了,需要对手势进行处理就是在changed状态下进行,一些特殊情况,例如当使用手势时有电话进来,这时会进入Cancelled状态。
2、协议、Block、力学特效动画
(1)协议,iOS针对不同对象提供了特定的方法,当然如果想使用这些方法,还需要按照规定格式声明一下,有点类似于接口的作用,预先提供了一些接口方便开发者使用,指定代理delegate,让代理者来实现协议中所提供的方法,比如Demo中使用了UIDynamicAnimatorDelegate这个协议提供的dynamicAnimatorDidPause方法(力学行为中断停止时触发),并在里面调用了自定义的方法,用来实现物体满一行后消失的效果。


当然,也可以根据需要自定义协议,比如两个页面之间跳转,尤其是需要页面跳转传值时,还可以把值作为协议方法里的参数进行传递。


(2)Block,代码块,有点类似C#的匿名函数。

使用block时需要注意retain cycle的问题,比如Demo中的一个block,由于在内部直接使用self,会造成block与self之间互相都有一个strong指针指向对方,造成二者都不能销毁,所以需要通过弱引用weakSelf来代替self。

(3)视图动画,iOS提供了一些封装好的视图动画效果供开发者直接使用。
(4)力学特效动画,iOS中也已经封装好了许多效果,Demo中用到了重力、碰撞、吸附效果,使用方法如下:
首先创建一个用于动画执行的容器UIDynamicAnimator,其中ReferenceView代表在那个view中进行动画,相当于物理学中的力学参考系。

在对具体的力学特效进行描述,指定是哪一种行为,

指定执行动画效果的对象(这里的dropBehavior是组合了重力和碰撞效果的行为)

3、自动布局
Xcode中提供了自动布局机制,对一些简单界面,加入一些约束条件就能处理不同尺寸、屏幕旋转后的界面显示效果。

使用自动布局(已经加了约束条件)前后效果截图:

Demo效果截图,下载地址:http://files.cnblogs.com/colinhou/Dropit.zip

斯坦福iOS7公开课7-9笔记及演示Demo的更多相关文章
- 斯坦福iOS7公开课1-3笔记及纸牌Demo
1.MVC Model:模型 描述程序是什么,例如数据库操作之类的行文以及纸牌Demo里纸牌玩法都是写在Model这一层,通过Notification和KVO(后续文章会介绍)两种方式与Control ...
- 斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据
这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简 ...
- 斯坦福iOS7公开课10笔记及演示Demo
这一节主要介绍了多线程中的串行队列以及滚动视图UIScrollView. 1 .多线程 这一节只是简单介绍了多线程的串行队列,即把任务加入线程队列后按顺序逐步执行. (1)目前iOS多线程提供的方法主 ...
- 斯坦福iOS7公开课4-6笔记及演示Demo
1.变量类型别滥用id,如果不仔细容易在程序执行时引发错误,因为在编译阶段编译器只是检测变量对象所属类型,尤其是类型为id时代表任何类型都可以通过检查,但不会检测变量对象调用的方法,这样当对象所属类不 ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...
- 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...
- [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9285001 该系列笔记1-5pdf下载请猛击这里. 本篇博客为斯坦福ML公开 ...
- [置顶] NB多项式事件模型、神经网络、SVM之函数/几何间隔——斯坦福ML公开课笔记6
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9722701 本篇笔记针对斯坦福ML公开课的第6个视频,主要内容包括朴素贝叶斯 ...
- 斯坦福大学公开课:iOS 7应用开发 笔记
2015-07-06 第一讲 课务.iOS概述 -------------------------------------------------- 开始学习斯坦福大学公开课:iOS 7应用开发留 ...
随机推荐
- 【HTML】iframe跨域访问问题
概述 本地同一浏览器访问本地HTML文件和访问服务器端HTML文件,本地Iframe没有自适应高度,而服务器端的Ifrane自适应了高度. 1.问题重现: Chrome 版本 41.0.2272.10 ...
- [git]通过commit_id找回文件
git checkout commit_id 这样会切换到这个commit_id的上,文件的内容就是这个commit保存的内容. git checkout -b new_branch_name com ...
- Fiddler进行手机抓包
测试设备:Windows8.1,Android 4.0.4山寨Android手机 网络环境:电信校园网,Wifi环境 测试工具:Fiddler4 完全参考了:http://www.jb51.net/s ...
- 通过Nginx实现负载均衡
百度了下负载均衡:英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务 嗯,跟我理 ...
- [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务
除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...
- 搜索 + 剪枝 --- POJ 1101 : Sticks
Sticks Problem's Link: http://poj.org/problem?id=1011 Mean: http://poj.org/problem?id=1011&lan ...
- MySQL主从复制与读写分离 --非原创
原文出处:http://www.cnblogs.com/luckcs/articles/2543607.html MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 ...
- Memcached入门
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度. Memcache ...
- vs 2010 中类文文件模板的修改
类模板 文件的修改,以前也修改过,这次有个同事问我,搞了有一会才搞定,这里还是记录分享下. 如果想在每次创建文件时,自动生成文档注释(注意是自动生成文档注释而不是帮助文档),如下面的代码,需要设置VS ...
- 【循序渐进学Python】8.面向对象的核心——类型(下)
1 构造和初始化对象 __init__方法是Python内建众多魔法方法(什么是魔法方法?)中最常见的一个,通过这个方法我们可以定义一个对象的初始操作.当构造函数被调用的时候的任何参数都会传递给__i ...