第贰,章.掌握面向对象

  器重:若三个类的改观会造成另二个类的更改,则称多少个类之间存在依靠。倚重关系采纳带箭头的虚线表示,其中箭头指向被正视的实体。

卡通(3)已经来了,动画(4)还会远啊?


用例图:用于描述系统提供的不可胜举作用,而种种用例则代表系统的一个效率模块。

整套动画都以依据图层的操作。

篮球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点二十二分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];

搞1个定时器美秒执行一遍旋转格局化解收工
钟表的光景思路就是那般的。

贝赛尔.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

苹果引入了3个新的CALayer子类叫做CAEmitterLayer。CAEmitterLayer是八个高品质的粒子引擎,被用来创立实时例子动画如:冰雾,火,雨等等那些效应。

CAEmitterLayer看上去像是许多CAEmitterCell的器皿,这一个CAEmitierCell定义了3个例子效果。你将会为不相同的例证效果定义3个或三个CAEmitterCell作为模版,同时CAEmitterLayer负责基于这几个模版实例化三个粒子流。3个CAEmitterCell类似于1个CALayer:它有3个contents属性可以定义为3个CGImage。

那种粒子的某一属性的起首值。比如,color属性指定了1个方可勾兑图片内容颜色的混合色。在示范中,大家将它设置为灰白。
事例某一质量的生成范围。比如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];

动画(三)就到那里了。


切实贯彻已经在源码里面解释的很明亮了,不懂的话可以直接评价或许私信。

继续:完结软件复用的伎俩,当子类继承父类后,子类作为一种尤其的父类,将一贯拿走父类的属性和章程

期待您继续关心作者哦。指出不足之处我会很兴高采烈。会疾速校订过来的。

类图可以象征实体的静态内部关系,还足以代表实体之间的相互关系:

源码地址链接:

运动图:用于描述用例内部的活动或方法的流程。

很兴奋iOS 动画三和豪门照面。

这一次动画连串部分对原作重写,同时感激她们的博文对小编的拉扯。
http://www.jianshu.com/p/027eddb2377a
https://www.gitbook.com/book/zsisme/ios-/details
http://www.cocoachina.com/ios/20141226/10775.html

收受啦作者会对动画片三的各类效果做3个观点

篮球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) {

    }];
}

那里送大家一句话:

 

点击下载源码

             关联关系包涵七个特例:聚合和构成,组合比聚合尤其凶狠。

UML包涵13中项目标图样,常用的UML图形有用例图、类图、组件图、计划图、顺序图、活动图和情况机图。

Java语言中,除了8中大旨数据类型外,一切都是对象。

     组合:你的耳朵是你的一部分,不能是其余人的一某些。使用带实心菱形框的实线表示。

     聚合:学生可以是篮球俱乐部成员,也可以是书法俱乐部成员。使用带空心菱形框的实线表示。

OOA对目的连串开展剖析,建立分析模型,将之文档化

装进:将目的的贯彻细节隐藏起来,然后通过一些公用方法来揭发该目的的功用

布署图:用于描述软件系统怎么样布署到硬件环境中,它的用途是显得软件系统不一样的组件将在哪里物理运营,以及它们将何以互相通讯。

面向对象语言的多少个基本特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)

组件图:大型应用程序平常会有三个或三个可配置的零件组成。对Java而言,可复用的组件平常打包成二个JA逍客、WA揽胜等公事

一般到新鲜:“is a”典型的三番五次关系,子类是特种的父类

 

     类完毕接口是一种特别的继承,使用带空心三角形的虚线表示。

空泛:忽略多少个核心中与当下目的毫不相关的那么些地点,抽象并不打算询问任何难点,而只是考虑部分题材。

  关联:多少个实体间存在关联,关联应用一条实线表示,带箭头的实线表示单向关系。

情况机图:描述某一对象生命周期中须求关爱的不比意况,并会详细描述刺激对象景况改变的事件,以及对象景况改变时所采纳的动作。

   对象抽象化是类,类的具体化是目的。

类之间的构造涉及:

采纳UML(统一建模语言)来讲述记录OOA和OOD的结果

次第图:描述了对象时期的相互(顺序图和通讯图都被称作交互图),重点在于描述新闻及其时间顺序。

 

类图:表示系统中应当包涵怎么着实体,各实体之间怎么关联。

  泛化:与继承是同1个概念,都以指子类是一种特有的父类,继承使用带空心三角形的实线表示。

UML:OOA和OOD的分析、设计结果必要联合的标志来讲述、沟通并记下,于是发出了UML

目标:是实际存在的此类事物的个体,由此也号称实例(instance)。

 

OOD用面向对象的思索对OOA的结果举行细化,得出设计模型

多态:子类对象足以一贯赋给父类变量,但运转时依然表现出子类的一颦一笑特征,意味着同二个项目标靶子在实践同三个方法时,只怕显示出两种表现特征。

 

完整到一些:“has
a”典型的咬合关系,在多个类中保存另二个对象的引用来落到实处组合关系。

Java程序最小程序单位是类。

面向对象语言可以更好的提供可重用性、可增添性和可维护性。

面向对象的章程是由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三局地组成

             类中某些属性引用到了别的二个实体时,则成为了涉嫌。

类:具有同样或貌似个性的一组对象的空洞就是类。