面向对象语言的多个基本特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)
很欢喜iOS 动画三和豪门照面。
这一次动画体系部分对原作重写,同时感激她们的博文对自身的拉扯。
http://www.jianshu.com/p/027eddb2377a
https://www.gitbook.com/book/zsisme/ios-/details
http://www.cocoachina.com/ios/20141226/10775.html
接到啦我会对动画片三的种种效果做一个视角
篮球1.gif
如上效益:篮球的门径跟鼠标移动的落点来运动的。所以很鲜明
要用到:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
#warning 取出鼠标的下落的最后点然后付给给个篮球的图层
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.basketballImageView.center = [[touches anyObject] locationInView:self.view];
} completion:^(BOOL finished) {
}];
}
此地送大家一句话:
包裹:将对象的达成细节隐藏起来,然后经过有些公用方法来揭穿该对象的效应
一体动画都是基于图层的操作。
篮球2.gif
以此意义
-(void)move{
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
animation.keyPath = @"position";
animation.duration = 2.0;
animation.delegate = self;
animation.values = @[
[NSValue valueWithCGPoint:CGPointMake(150, 32)],
[NSValue valueWithCGPoint:CGPointMake(150, 300)],
[NSValue valueWithCGPoint:CGPointMake(150, 140)],
[NSValue valueWithCGPoint:CGPointMake(150, 300)],
[NSValue valueWithCGPoint:CGPointMake(150, 220)],
[NSValue valueWithCGPoint:CGPointMake(150, 300)],
[NSValue valueWithCGPoint:CGPointMake(150, 250)],
[NSValue valueWithCGPoint:CGPointMake(150, 300)]
];
animation.timingFunctions = @[
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn],
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut],
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn],
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut],
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn],
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut],
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn]
];
animation.keyTimes = @[@0.0, @0.3, @0.5, @0.7, @0.8, @0.9, @0.95, @1.0];
self.basketBallImageView.layer.position = CGPointMake(150, 300);
[self.basketBallImageView.layer addAnimation:animation forKey:nil];
}
比方对主要帧动画还不精晓的话可以参见
动画(一)http://www.jianshu.com/p/7fc7e6a6868f
动画(二)http://www.jianshu.com/p/d4c516a2d82a
时钟.gif
接下去自个儿重点说下钟表的完结。
资源图形如下:
表盘
时针
分针
秒针
将三回摆放在表针依次摆放在表盘中,我的demo中用的是antolayout
意义图如下:
布置的起初地方
接下去就是让她跑起来。
时钟时钟就是要有时光才得以
收下里即将获取当前的光阴时分秒
iOS8是:NSGregorianCalendar
iOS9是:NSCalendarIdentifierGregorian
iOS8是:
NSUInteger units = NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit
iOS9是
NSUInteger units = NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSUInteger units = NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
NSDateComponents *components = [calendar components:units fromDate:[NSDate date]];
钟表对象
打印出脚下的岁月是21点24分40秒有了那个一切都好办了。
接下去把当下的时日转为弧度
CGFloat hoursAngle = (components.hour / 12.0) * M_PI * 2.0;
CGFloat minsAngle = (components.minute / 60.0) * M_PI *2.0;
CGFloat secsAngle = (components.second / 60.0) *M_PI *2.0;
有了弧度那就让他跑起来
self.hour.transform = CGAffineTransformMakeRotation(hoursAngle);
self.minute.transform = CGAffineTransformMakeRotation(minsAngle);
self.second.transform = CGAffineTransformMakeRotation(secsAngle);
您不以为那有点古怪吗?
那她凭什么一样跑?不要急 接着往下看
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
搞一个定时器美秒执行三遍旋转方式化解收工
钟表的大体思路就是这样的。
贝赛尔.gif
上面的效应一看一个球在一条画上去的曲线运功。
先解决曲线方法可以画出来,然后那里用贝赛尔曲线假设你还不是清楚贝赛尔请看如下链接
http://my.oschina.net/LangZiAiFer/blog/175623
http://www.tuicool.com/articles/uyiEBv
画一条贝赛尔曲线:
UIBezierPath *bezierPath = [[UIBezierPath alloc]init];
[bezierPath moveToPoint:CGPointMake(50, self.view.bounds.size.height-50)];
[bezierPath addCurveToPoint:CGPointMake(300, 150) controlPoint1:CGPointMake(110, 0) controlPoint2:CGPointMake(110, 100)];
CAShapeLayer *pathLayer = [[CAShapeLayer alloc]init];
pathLayer.path = bezierPath.CGPath;
pathLayer.fillColor = [UIColor clearColor].CGColor;
pathLayer.strokeColor = [UIColor lightGrayColor].CGColor;
pathLayer.lineWidth = 3.f;
[self.buttomView.layer addSublayer:pathLayer];
接受里让篮球动起来 依然用关键帧
CAKeyframeAnimation *animation1 = [CAKeyframeAnimation animation];
animation1.keyPath = @"position";
#warning 运动轨迹 就是刚才的贝赛尔曲线
animation1.path = bezierPath.CGPath;
animation1.rotationMode = kCAAnimationRotateAuto;
animation1.duration = 5.0;
扩散.gif
苹果引入了一个新的CALayer子类叫做CAEmitterLayer。CAEmitterLayer是一个高品质的粒子引擎,被用来创设实时例子动画如:气团雾,火,雨等等那个功效。
CAEmitterLayer看上去像是许多CAEmitterCell的容器,这么些CAEmitierCell定义了一个例子效果。你将会为不一样的事例效果定义一个或三个CAEmitterCell作为模版,同时CAEmitterLayer负责基于那些模版实例化一个粒子流。一个CAEmitterCell类似于一个CALayer:它有一个contents属品质够定义为一个CGImage。
那种粒子的某一品质的初叶值。比如,color属性指定了一个可以勾兑图片内容颜色的混合色。在演示中,大家将它设置为藏蓝色。
事例某一性子的变迁范围。比如emissionRange属性的值是2π,那意味例子可以从360度随便地方反射出来。要是指定一个小一些的值,就足以创制出一个圆锥形
指定值在时光线上的变动。比如,在演示中,我们将alphaSpeed设置为-0.4,就是说例子的透明度每过一秒就是缩减0.4,那样就有发出出来将来逐步小时的法力。
代码如下:
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.frame = self.snowImageView.bounds;
[self.snowImageView.layer addSublayer:emitter];
emitter.renderMode = kCAEmitterLayerAdditive;
emitter.emitterPosition = CGPointMake(200, self.view.frame.size.height/2-100);
CAEmitterCell *cell = [[CAEmitterCell alloc]init];
cell.contents = (__bridge id)([UIImage imageNamed:@"Spark.png"].CGImage);
cell.birthRate = 150;
cell.lifetime = 5.0;
cell.color = [UIColor redColor].CGColor;
cell.alphaSpeed = -0.4;
cell.velocity = 50;
cell.velocityRange = 50;
cell.emissionRange = M_PI * 2.0;
emitter.emitterCells = @[cell];
卡通(三)就到此处了。
切切实实贯彻已经在源码里面解释的很了解了,不懂的话可以一直评价大概私信。
篮球,继承:完成软件复用的手法,当子类继承父类后,子类作为一种奇特的父类,将一向得到父类的属性和艺术
意在您持续关注自个儿啊。提议不足之处我会很和颜悦色。会赶紧更正过来的。
多态:子类对象可以一向赋给父类变量,但运行时依旧显示出子类的行事特征,意味着同一个类其他对象在执行同一个艺术时,大概显现出三种表现特征。
卡通(3)已经来了,动画(4)还会远吗?
抽象:忽略一个宗旨中与当前目的无关的这个地点,抽象并不打算询问任何难点,而只是考虑部分题材。
源码地址链接:
点击下载源码
Java程序最小程序单位是类。
面向对象的法门是由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三部分组成
OOA对目标连串开展辨析,建立分析模型,将之文档化
OOD用面向对象的钻探对OOA的结果开展细化,得出设计模型
选拔UML(统一建模语言)来讲述记录OOA和OOD的结果
UML:OOA和OOD的解析、设计结果须要统一的标志来描述、调换并记下,于是暴发了UML
UML包括13中项目标图样,常用的UML图形有用例图、类图、组件图、计划图、顺序图、活动图和情景机图。
用例图:用于描述系统提供的多重功能,而各样用例则表示系统的一个作用模块。
类图:表示系统中应有包蕴哪些实体,各实体之间怎么关联。
类图可以代表实体的静态内部关系,还足以象征实体之间的相互关系:
关联:三个实体间存在涉嫌,关联应用一条实线表示,带箭头的实线表示单向关系。
类中某个属性引用到了此外一个实体时,则变成了关系。
关联关系包括两个特例:聚合和重组,组合比聚合越发冷酷。
聚合:学生可以是篮球俱乐部成员,也得以是书法俱乐部成员。使用带空心菱形框的实线表示。
组合:你的耳根是您的一有的,不容许是其余人的一局部。使用带实心菱形框的实线表示。
泛化:与继承是同一个概念,都是指子类是一种新鲜的父类,继承使用带空心三角形的实线表示。
类已毕接口是一种越发的持续,使用带空心三角形的虚线表示。
器重:若一个类的更改会造成另一个类的更改,则称七个类之间存在依靠。依赖关系选用带箭头的虚线表示,其中箭头指向被看重的实业。
组件图:大型应用程序寻常会有一个或多个可布署的零部件组成。对Java而言,可复用的机件平日打包成一个JAR、WAR等公事
布署图:用于描述软件系统如何陈设到硬件条件中,它的用途是显得软件系统差其他组件将在何方物理运行,以及它们将何以互相通讯。
逐一图:描述了目的之间的互动(顺序图和通讯图都被号称交互图),重点在于描述新闻及其时间各样。
运动图:用于描述用例内部的位移或方法的流水线。
意况机图:描述某一对象生命周期中需要关心的不比意况,并会详细描述刺激对象情形改变的轩然大波,以及对象景况改变时所使用的动作。
面向对象语言可以更好的提供可重用性、可增加性和可维护性。
Java语言中,除了8中宗旨数据类型外,一切都是对象。
类:具有同等或一般天性的一组对象的虚幻就是类。
对象:是事实上存在的此类事物的私房,由此也叫夯实例(instance)。
对象抽象化是类,类的具体化是目标。
类之间的构造关系:
诚如到独特:“is a”典型的继续关系,子类是卓绝的父类
总体到一些:“has
a”典型的组成关系,在一个类中保存另一个目标的引用来兑现组合关系。