iOS开发——总结篇&常用开发总结
一、通知
1.监听通知
- - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
- 当anObject对象发布一条名字叫做aName的通知时,就会调用observer的aSelector方法
2.发布通知
- // 发布一个通知对象(name、object、userInfo)
- - (void)postNotification:(NSNotification *)notification;
- // anObject发布了一个名字叫做aName的通知
- - (void)postNotificationName:(NSString *)aName object:(id)anObject;
- // anObject发布了一个名字叫做aName的通知,并且传递了一个额外数据:aUserInfo
- - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
二、从storyboard里面加载控制器
1.加载storyboard
- 1> 方法1:利用storyboard文件的名字
- + (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil;
- 2> 方法2:控制器的storyboard方法
- - [UIViewController storyboard]
2.加载控制器
- // 返回第一个控制器(初始化控制器,箭头所指的控制器)
- - (id)instantiateInitialViewController;
- // 返回唯一标识是identifier的控制器
- - (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;
三、block的定义格式
1.block变量的定义
- void (^myblock)(int, int);
- myblock = ^(int a, int b) {
- };
int age = 10;
2.@property的定义
- @property (nonatomic, copy) void (^myblock)(int, int);
- @property (nonatomic, assign) int age;
3.当做方法的参数
- - (void)setMyBlock:(void (^)(int, int))myblock;
- - (void)setAge:(int)age;
四、CGRect常见函数
- 1.CGRectGetMinX(CGRect rect) 等函数
- 2.CGRectContainsPoint(<#CGRect rect#>, <#CGPoint point#>)
五、UIImage的裁剪
- CGImageCreateWithImageInRect(<#CGImageRef image#>, <#CGRect rect#>)
六、消除锯齿
- - (void)clearAlias
- {
- self.layer.borderWidth = 2;
- self.layer.borderColor = [UIColor clearColor].CGColor;
- // 就会把图层当做是一个bitmap来渲染
- self.layer.shouldRasterize = YES;
- for (UIView *child in self.subviews) {
- [child clearAlias];
- }
- }
七、计时器
1.NSTimer
- 1> 人为控制刷新频率
- 2> 对刷新速度要求不高,适合慢刷新
- 3> 创建timer
- // 返回一个新的timer,但是不会开始计时,需要调用fire方法
- + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
- // 返回一个新的timer,会马上开始计时
- + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
- 4> 停止计时器(只要计时器停止了,以后不能再次开始计时)
- - (void)invalidate;
2.CADisplayLink
- 1> 包含QuartzCore框架
- 2> 固定刷新频率(1秒钟刷新60次)
- 3> 对刷新速度要求高,适合快刷新
- 4> 创建displaylink
- // 返回一个CADisplayLink计时器对象,1秒内会调用60次target的sel方法,并且将CADisplayLink当做参数传入
- + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
- 5> 开始计时
- - (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
- 6> 停止计时
- - (void)invalidate;
- 7> 刷帧间隔
- @property(readonly, nonatomic) CFTimeInterval duration;
- 8> 控制暂停或者继续
- @property(getter=isPaused, nonatomic) BOOL paused;
八、动画
1.UIView封装的动画
- 1> 首尾式
- [UIView beginAnimations:nil context:nil];
- // ... 需要执行怎样的动画
- [UIView commitAnimations];
2> block
- [UIView animateWithDuration:0.5 animations:^{
- // 需要执行的动画
- } completion:^(BOOL finished) {
- // 动画完成
- }];
3> 转场动画(过渡动画)
- // 让某个view执行转场动画
- [UIView transitionWithView:<#(UIView *)#> duration:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>];
2.CALayer的动画
- // CABasicAnimation和CAKeyframeAnimation的keyPath可以是哪些值?
- // 在xcode文档搜索:CALayer Animatable Properties
- // transform的具体属性:搜索catransform3d key path
1> CABasicAnimation
- * fromValue 初始值
- * toValue 最终值 (从初始化变化到最后某一个值)
- * byValue 步进值 (在初始值的基础上,增加多少值)
2> CAKeyframeAnimation
- * values
3> CATransition(转场动画)
- CATransition *anim = [CATransition animation];
- anim.type = @"cube";
- anim.subtype = kCATransitionFromBottom;
- [view.layer addAnimation:anim forKey:nil];
4> CAAnimationGroup
- * 动画,可以同时执行多个动画
3.如何选择动画
- 1> 如果需要重复执行多次动画,最好选择CALayer动画
- 2> 如果动画执行完毕后,就要用到前面的一些东西,最好选择UIView的block动画
- 3> 如果需要同时执行多个动画,最好选择CAAnimationGroup
- 4> UIView动画和CALayer动画中最灵活的是CALayer的动画
4.自定义一些动画
- 用CADisplayLink,在刷帧方法完成需要执行的动画
iOS开发——总结篇&常用开发总结的更多相关文章
- iOS开发UI篇—iPad开发中得modal介绍
iOS开发UI篇—iPad开发中得modal介绍 一.简单介绍 说明1: 在iPhone开发中,Modal是一种常见的切换控制器的方式 默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止 说明2: ...
- iOS开发——OC篇&常用关键字的使用与区别
copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别 最近在学习iOS的 ...
- iOS开发——高级篇——iPad开发、iPad开发中的modal
一.iPad简介 1.什么是iPad一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑产品之间跟iPhone一样,搭载的是iOS操作系统 2.iPhone和iPadi ...
- SAP web 开发 (第二篇 bsp 开发 mvc模式 Part2 )
单击第一个图标,第一个图标突出显示,单击第二个图标,第一个变灰,第二个突出显示,反之一样.单击history读取历史记录. Controller ZCL_SUS_C_ORDER_CHANGE 1. ...
- SAP web 开发 (第二篇 bsp 开发 mvc模式 Part1 )
Model-View-Controller 简称MVC. 简单的说就是把数据处理,显示,页面事件及处理过程分离开来,企业应用多数都采用这种方式,多层架构的优缺点不再多言,google一下啥都知道. 在 ...
- iOS开发数据库篇—SQLite常用的函数
iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 * ...
- ios开发——实用技术总结Swift篇&swift常用开发技术总结
swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): lazy var shops:Array<Dictionary<String, String>& ...
- iOS开发网络篇—简单介绍ASI框架的使用
iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...
- iOS开发数据库篇—SQLite简单介绍
iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...
随机推荐
- [Papers]NSE, $u_3$, Lebesgue space [Zhou-Pokorny, Nonlinearity, 2009]
$$\bex u_3\in L^p(0,T;L^q(\bbR^3)),\quad \frac{2}{p}+\frac{3}{q}=\frac{3}{4}+\frac{1}{2q},\quad \fra ...
- Storm-6 Storm的并行度、Grouping策略以及消息可靠处理机制简介
概念: 配置并行度 动态的改变并行度 流分组策略----Stream Grouping 消息的可靠处理机制 概念: Workers (JVMs): 在一个节点上可以运行一个或多个独立的JVM 进程.一 ...
- android左右滑动加载分页以及动态加载数据
android UI 往右滑动,滑动到最后一页就自动加载数据并显示 如图: package cn.anycall.ju; import java.util.ArrayList; import java ...
- 【C++对象模型】构造函数语意学之一 默认构造函数
默认构造函数,如果程序员没有为类定义构造函数,那么编译器会在[需要的时候]为类合成一个构造函数,而[需要的时候]分为程序员需要的时候和编译器需要的时候,程序员需要的时候应该由程序员来做工作,编译器需要 ...
- C++实现网格水印之调试笔记(四)—— 完成嵌入
接下来的问题是,当模型是对称的时候,结果是符合预期的,但是当模型是不对称的时候,结果是错误的,如下: 输入: 顶点:233 输出: 这又是什么鬼...,我的马呢!!! 看来逻辑上还是有错误 注意这时候 ...
- [转]python下很帅气的爬虫包 - Beautiful Soup 示例
原文地址http://blog.csdn.net/watsy/article/details/14161201 先发一下官方文档地址.http://www.crummy.com/software/Be ...
- Intellij IDEA Maven创建web项目
Intellij IDEA在创建java webapp的时候没有那么人性化,新手使用会处处碰壁.特此记录! 一.File--New--project 二.Next--输入GroupId.Artifac ...
- node-mysql中的连接池代码学习
node-mysql是一个node.js下的mysql驱动,前段时间在处理连接池的问题上遇到了连接不释放的疑难杂症,虽已解决,但仍需总结经验避免下次重蹈覆辙.下面是node-mysql中的连接池的部分 ...
- MySQL分支Percona, cmake编译安装
Percona是在MySQL基础上改进的,在功能和性能上有着很显著的提升.该版本提升了在高负载情况下的InnoDB的性能,为DBA提供一些非常有用的性能诊断工具:另外有更多的参数和命令来控制服务器行为 ...
- ProtoBuffer 简单例子
最近学了一下protobuf,写了一个简单的例子,如下: person.proto文件 message Person{ required string name = 1; required int32 ...