第二章篮球.明白面向对象

面向对象语言的八个基本特征:封装(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

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

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

那种粒子的某一品质的初步值。比如,color属性指定了三个方可勾兑图片内容颜色的混合色。在示范中,大家将它设置为鲑鱼红。
事例某一特性的变迁范围。比如emissionRange属性的值是2π,这意味着例子可以从360度任意地点反射出来。即使指定一个小片段的值,就可以创建出3个星型
指定值在时光线上的变动。比如,在演示中,大家将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图形有用例图、类图、组件图、陈设图、顺序图、活动图和境况机图。

用例图:用于描述系统提供的不可胜计功能,而各种用例则表示系统的多个效用模块。

类图:表示系统中应该包含哪些实体,各实体之间什么关联。

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

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

             类中有些属性引用到了其余一个实体时,则改为了关联。

             关联关系蕴涵多少个特例:聚合和重组,组合比聚合越发严刻。

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

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

  泛化:与持续是同2个定义,都是指子类是一种新鲜的父类,继承使用带空心三角形的实线表示。

     类落成接口是一种尤其的接轨,使用带空心三角形的虚线表示。

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

零件图:大型应用程序经常会有2个或多个可部署的零部件组成。对Java而言,可复用的零部件平常打包成三个JA奥迪Q7、WA路虎极光等文件

布置图:用于描述软件系统怎么样安插到硬件条件中,它的用处是显示软件系统不一致的组件将在何方物理运营,以及它们将何以互相通讯。

次第图:描述了目标时期的并行(顺序图和通讯图都被称呼交互图),重点在于描述新闻及其时间种种。

移动图:用于描述用例内部的位移或措施的流程。

意况机图:描述某一对象生命周期中须要关爱的不等情况,并会详细描述刺激对象处境改变的事件,以及对象情形改变时所使用的动作。

 

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

 

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

 

类:具有相同或貌似天性的一组对象的抽象就是类。

目的:是事实上存在的此类事物的个人,由此也叫加强例(instance)。

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

类之间的协会涉及:

相似到特殊:“is a”典型的两次三番关系,子类是异样的父类

一体化到部分:“has
a”典型的咬合关系,在3个类中保留另1个目标的引用来兑现组合关系。