18-UIKit(Core Animation、广播设计模式)
目录:
一、Core Animation
1. 是什么?
底层的动画框架
2. 框架对比
UIKit UI UIView AppKit NS NSView
(Cocoa Touch = UIKit + Foundation) (Cocoa = AppKit + Foundation)
核心:让好看又能动的东西 在手机上和用户可以交互
OC级别:
+ UIControl/UIView子类
+ UITableView/UICollectionView
+ UIGestureRecognizer / UIView touch
Core Animation CA CALayer
(Quartz Core)
核心:让绘制出来的东西,变得更好看,或者动起来
C级别:
UIKit OC级别的简化类
+ UIView transform
+ UIView animate...
+ autoresizing
+ autolayout
Core Graphic CG CGContextRef
(Quartz 2D)
核心:绘制
C级别:线、填充颜色、文字、阴影、图像
UIKit OC级别的简化类
+ UIColor
+ UIBezierPath
+ NSString(UIKit)
3. UIView vs CALayer
UIKit Core Animation
UIView CALayer
-> view.layer
addSubview addSublayer
frame frame
autoreszing autoreszing
transform 2D transform 3D
animate animate 3D动画 颜色动画
增加一个圆角边
增加一个阴影
粒子效果
4. Layer
1) 设置圆角
2) 遮罩/蒙板
3) CATransform3D
内部 4x4 矩阵
- (void)viewDidLoad
{
[super viewDidLoad];
self.imageView.layer.cornerRadius = ;// 设置圆角
self.imageView.layer.masksToBounds = YES;// 遮罩/蒙板
CATransform3D transform = CATransform3DIdentity;
transform.m34 = - 1.0 / ;
transform = CATransform3DRotate(transform, M_PI_4, , , );//x轴旋转45度,x轴旋转45度 x y z轴
self.imageView.layer.transform = transform;
}
二、广播设计模式
概念:
0.生活中的广播,电视直播、收音机、商场、微博
1.什么是广播设计模式?一个对象不用知道消息的接收者是谁,就可以给这些需要消息的对象发消息
2.为什么会有这个模式?
1>有些情况下,发送消息的发送者无法预测接收者的存在和数量
2>有些情况下,消息的接收者和发送者距离太远
3.核心逻辑,发送者、收听者
1>收听者,打开收音机、收听广播,调频到和将来发送者频道一致
2>发送者发送一个广播,只要曾经打开收音机收听当前频道的收听者都能听到广播
3>收听者关闭广播
4.ios中对广播的实现
NSNotification 一条通知
NSNotificationCenter 通知中心
步骤:[MX2]
1.收听者打开收音机收听广播
1>先找到通知中心
NSNotifecationCenter * center = NSNotifecationCenter defaultCenter
2>注册收听某主题的广播 addObeserver
2.发生者发送广播
1>找到通知中心
2>创建通知对象
3>发送 使用通知中心发送通知对象post
-(void)kaishi{
// 找到通知中心
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
// 创建通知对象
NSNotification *nofication = [NSNotification notificationWithName:@"WWDC" object:nil];
// 发送 使用通知中心发送通知对象
[center postNotification:nofication];
}
3.收听者处理收听
1>实现收听消息,处理逻辑
4.关闭广播,收听者不需要的时候停掉收听(必须要关)
1>找到通知中心
2>remove停掉收听
-(id)init{
self = [super init];
if (self) {
// 找到通知中心
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
// 注册收听某主题的广播
[center addObserver:self selector:@selector(jieshou:) name:@"WWDC" object:nil];
}
return self;
}
// 处理收听
-(void)jieshou:(id)sender{
NSLog(@"jieshoudaole");
}
// 停掉收听
-(void)dealloc{
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center removeObserver:self name:@"WWDC" object:nil];
}
5.通知中心发布信息时同时传送数据
// 创建通知对象
NSDictionary *data = @{@"Product": @"iPad Air"};
NSNotification *nofication = [NSNotification notificationWithName:@"WWDC" object:nil userInfo:data];
//收听这接收数据
-(void)jieshou:(NSNotification *)sender{
NSLog(@"%@",sender.userInfo[@"Product"]);
}
6. 内部机理
[G01]
7. 广播的同时传输数据
发送广播的时候 数据放在通知对象的userInfo下
接收广播的时候,第一个参数不是CCTV而是新闻(NSNotification)
接收的第一个参数就是发送者创建的通知对象
8. 字符串常量
.h
extern NSString * const XXXxxxXxxxxxxxx;
.m
NSString * const XXXxxxXxxxxxxxx = @".....";
9. 效果
消息接收者的增加
不会影响到现有消息发送者的代码
也不会影响到其它现有接收者的代码
10. 打开广播 / 关闭广播 必须必须配对
init - dealloc
viewDidLoad - viewDidUnload / dealloc
viewWillAppear - viewDidDisappear
viewDidAppear - viewWillDisappear
选中VC在第四个检查器里,默认选中under top bars意思是该VC渗透在top bar的下面,取消则不渗透
18-UIKit(Core Animation、广播设计模式)的更多相关文章
- UIKit,Core Data , Core Graphics, Core Animation,和OpenGLES框架
iOS的主要框架介绍 框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件.一个共享库定义的方法或函数可以被应用程序调用. IOS提供了很多你可以在应用程序 ...
- Cocoa Touch(三):图形界面UIKit、Core Animation、Core Graphics
UIKit 视图树模型 1.视图树模型 计算机图形实际上是一个视图树模型,每个视图都有一个本地坐标系.每个本地坐标系的组成部分是:原点在父坐标系中的位置,每个基在父坐标系中的位置,由此就可以根据向量的 ...
- Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)
前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果 ...
- Core Animation编程指南
本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原 ...
- iOS开发之Core Animation
在IOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了. 在Core Animation中我们经常使用的是 CABasi ...
- 老司机带你走进Core Animation
为什么时隔这么久我又回来了呢? 回来圈粉. 开玩笑的,前段时间ipv6被拒啊,超级悲剧的,前后弄了好久,然后需求啊什么的又超多,所以写好的东西也没有时间整理.不过既然我现在回来了,那么这将是一个井喷的 ...
- 关于Core Animation(转载部分内容)
读者在浏览技术博客的时候,看到一篇关于Core Animation的介绍,觉得挺有用的,想分享给大家.原作者不知道是谁,嘿,所以就先不标注了,如有冒犯敬请原谅.不过笔者从中摘录部分内容分享一下. 其中 ...
- iOS——Core Animation 知识摘抄(四)
原文地址http://www.cocoachina.com/ios/20150106/10840.html 延迟解压 一旦图片文件被加载就必须要进行解码,解码过程是一个相当复杂的任务,需要消耗非常长的 ...
- iOS——Core Animation 知识摘抄(三)
原文地址:http://www.cocoachina.com/ios/20150105/10827.html CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘 ...
随机推荐
- adb shell top
PID:进程在系统中的ID CPU% - 当前瞬时所以使用CPU占用率 #THR - 程序当前所用的线程数 UID - 运行当前进程的用户id Name - 程序名称android.process.m ...
- How Many Answers Are Wrong(并查集)
Description TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he ...
- JavaSE学习总结第20天_IO流2
20.01 递归概述和注意事项 递归:方法定义中调用方法本身的现象 递归注意事项: 1.要有出口,否则就是死递归 2.次数不能太多,否则就内存溢出 3.构造方法不能递归使用 20.02 递归求 ...
- BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )
把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...
- Python Extension Packages下载链接
一.http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载后可使用pip包管理器进行安装,在命令行中输入: pip install 安装包的路径
- c++继承构造子类调用父类构造函数的问题及关于容器指针的问题及当容器里储存指针时,记得要手动释放
看下面的一个问题: class Person { private: string name; public: Person(const string& s=""){ nam ...
- Android Dalvik 虚拟机
简介 Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准java虚拟机上的.谷歌专门为Android平台设计了一套虚拟机来运行Android程序.它就是Da ...
- CocoaPods的安装及设置
1>CocoaPods简介 CocoaPods是一个用来帮助我们管理第三方依赖库的工具 在开发iOS应用时,会经常使用第三方类库,手动下载比较麻烦,通过CocoaPods可以便捷的下载与管理第三 ...
- Wiki: HSL和HSV色彩空间
HSL 和 HSV(也叫做 HSB)是对RGB 色彩空间中点的两种有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单.HSL 表示 hue(色相).saturation( ...
- Java开源内容管理CMS系统J4CMS的几个样式
www.j4cms.com java 开源内容管理 页面直接编辑 bootstrap3 样式 default 样式 metro 样式 oschina 样式 leblog 样式 foundation 样 ...