美文网首页还不懂的程序员iOS Developer
使用OC链式调用方式简化SpriteKit的动画调用

使用OC链式调用方式简化SpriteKit的动画调用

作者: 小武的技术渔场 | 来源:发表于2016-02-25 10:15 被阅读118次


一,什么是链式调用?

在网络前端编程里使用JQuery,经常可以看到链式调用,代码易读简洁。

例如:

$(“#Test”).css(‘color’,’red’).show(200).removeClass(‘style’); 对id选择器为Test的对象进行了三项操作:先设置其字体颜色为红色,再显示对象,最后移除对象的“style”样式。

通过“.”操作符调用方法执行后返回方法执行的实体,然后可以接着再使用“.”操作符继续调用其它方法。

二,Objective-C里面如何实现链式操作?

非常简单,Objective-C语言里面,跟JQuery里面一样,可以使用Block实现链式调用。

摘抄一个网络上提供的实现例子说明:

1,首先定义一个Person对象,然后定义名为eat、learn、play的几个块为成员变量,声明为property属性


@property (nonatomic, readonly) Person*(^eat)(); @property (nonatomic, readonly) Person*(^learn)(); @property (nonatomic, readonly) Person*(^play)();

2,property属性会默认生成setter和getter方法,我们这里覆写getter方法,传出一个Block,Block调用返回调用者本身。


// Person覆写的方法   - ( Person *(^)() )eat {       return ^{         NSLog(@"吃饭");          return self;      };   }   - ( Person *(^)() )learn {       return ^{         NSLog(@"学习");         return self;     };  }   - ( Person *(^)() )play  {      return ^{          NSLog(@"娱乐");          return self;      };  }   // 带参数的链式调用 - ( Person *(^)( NSString* food ) )eat  {     return ^( NSString* food ){          NSLog(@"吃饭---- %@",food);         return self;     }; }

链式调用实例:

Person *p = [ [Person alloc] init ];

无参数情况:

p.eat().learn().play();

输出:

吃饭

学习

娱乐

有参数情况:

p.eat(@”意大利面”).learn().play();

输出:

吃饭—-意大利面

学习

娱乐

三,有实战意义吗?如何使用?

哇哇,看起来是个不错的小窍门啊,但是有实战意义吗?能引入什么方便吗?

好吧,之前写过两个SpriteKit的教程,做相关游戏,里面都有提到动画相关的东东。如果我要指挥一个SpriteNode实体,必须指定相关的SKAction然后让该SpriteNode节点,执行SKAction。如果是一个动作还好,但是如果要执行一系列动作,或者同时运行很多动作的话,就要生成很多SKAction,然后把它们组合在一起成为一个sequence或者group的action一起执行。

具体来举例,向右移动100,向上移动100,向左移动50,向上移动100的动画,需要如下实现:


SKAction *move = [SKAction moveBy:CGVectorMake(100, 0) duration:1]; SKAction *move2 =[SKAction moveBy:CGVectorMake(0, 100) duration:1]; SKAction *move3 = [SKAction moveBy:CGVectorMake(-50, 0) duration:1]; SKAction *move4 = [SKAction moveBy:CGVectorMake(0, 100) duration:1]; SKAction *seq = [SKAction sequence:@[move,move2,move3,move4]]; [SpriteNode runAction:seq];

我自己封装了一个WJSAction的类,可以实现SKAction的链式调用,Github工程地址为

https://github.com/halinuya/WJSAction.git

,完成上面的调用,仅用如下一行就可以实现。


[SpriteNode runAction:[WJSACTION.SeqStart().moveByV(CGVX(100),1).moveByV(CGVY(100),1).moveByV(CGVX(-50),1).moveByV(CGVY(100),1).SeqEnd()]];

看起来比较简单简洁,不需要很多中间变量。

大家可以到我封装的

WJSAction

工程里面直接使用链式SKAction,简化代码。

相关文章

  • 使用OC链式调用方式简化SpriteKit的动画调用

    一,什么是链式调用? 在网络前端编程里使用JQuery,经常可以看到链式调用,代码易读简洁。 例如: $(“#Te...

  • OC链式编程的一个实践

    所谓链式编程,基本都是调用一个方法的时候返回对象本身,然后可以继续调用方法。以OC为例: 不过OC使用中括号调用方...

  • swift重温笔记(可选链式调用)

    使用可选链式调用代替强制展开 为可选链式调用定义模型类 通过可选链式调用访问属性 通过可选链式调用调用方法 通过可...

  • iOS之Objective-C中实现链式语法

    链式语法:在一行代码之内多次以点调用的形式调用方法。链式语法能使复杂的代码使用简化,看起来非常的优雅。 Objec...

  • 使用Lodash链式调用简化代码

    获取到的数据: 前端展示需要的格式: 最开始的写法,简单说就是:for循环嵌套 重构该方法,使用lodash的链式...

  • Swift 5.1 - GCD使用总结

    在swift中GCD采用链式调用,较OC而言使用方式更为简单,可读性更高。全文代码均默认在主线程中执行。 队列的获...

  • Runtime的使用

    Runtime的三种使用方式: OC原生底层调用会间接使用runtime例如:方法的调用实质就是消息的发送 调用N...

  • iOS UIWebView与JS交互

    1.OC调用JS方法: 2.JS调用OC的方法: js调用oc的方法分两种方式:第一种方式——直接调用 第二种方式...

  • 使用链式编程简化多参数调用

    1.开发疑惑和想要的结果 在项目开发中,如果遇到多参数传递可能会出现如下问题: 写完第一个头像加载方法后,因为没有...

  • Netty源码分析系列--3. 服务器启动ServerBootS

    1. ServerBootstrap的使用: 通过链式的方式逐个调用group、channel、handler、c...

网友评论

    本文标题:使用OC链式调用方式简化SpriteKit的动画调用

    本文链接:https://www.haomeiwen.com/subject/msvikttx.html