其次章.明白面向对象

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