动画片(三)

面向对象语言的多个基本特征:封装(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”典型的组成关系,在一个类中保存另一个目标的引用来兑现组合关系。