SCNAction类,总结下一共:位置移动动画,循转动画,放大缩小动画,自定义动画(javascript)。
1.位置移动
//移动相对位置
+ (SCNAction *)moveByX:(CGFloat)deltaX y:(CGFloat)deltaY z:(CGFloat)deltaZ duration:(NSTimeInterval)duration;
+ (SCNAction *)moveBy:(SCNVector3)delta duration:(NSTimeInterval)duration;
//移动指定位置
+ (SCNAction *)moveTo:(SCNVector3)location duration:(NSTimeInterval)duration;
2.旋转
//旋转相对于当前位置
+ (SCNAction *)rotateByX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;
+ (SCNAction *)rotateByAngle:(CGFloat)angle aroundAxis:(SCNVector3)axis duration:(NSTimeInterval)duration;
//旋转指定位置
+ (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;
+ (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration shortestUnitArc:(BOOL)shortestUnitArc;
+ (SCNAction *)rotateToAxisAngle:(SCNVector4)axisAngle duration:(NSTimeInterval)duration;
3.缩小放大
//缩小放大相对位置
+ (SCNAction *)scaleBy:(CGFloat)scale duration:(NSTimeInterval)sec;
//缩小放大指定位置
+ (SCNAction *)scaleTo:(CGFloat)scale duration:(NSTimeInterval)sec;
4.多个动画按照顺序执行
+ (SCNAction *)sequence:(NSArray *)actions;
5.多个动画按照一起执行
6.执行次数
+ (SCNAction *)repeatAction:(SCNAction *)action count:(NSUInteger)count;
7.一直执行
+ (SCNAction *)repeatActionForever:(SCNAction *)action;
8.消失出现
//默认node.opacity为1.0
//出现
+ (SCNAction *)fadeInWithDuration:(NSTimeInterval)sec;
//消失
+ (SCNAction *)fadeOutWithDuration:(NSTimeInterval)sec;
9.等待几秒后执行
+ (SCNAction *)waitForDuration:(NSTimeInterval)sec;
等待几秒到几秒之间执行
+ (SCNAction *)waitForDuration:(NSTimeInterval)sec withRange:(NSTimeInterval)durationRange;
10.移除node
+ (SCNAction *)removeFromParentNode;
11.执行动画
+ (SCNAction *)runBlock:(void (^)(SCNNode *node))block;
+ (SCNAction *)runBlock:(void (^)(SCNNode *node))block queue:(dispatch_queue_t)queue;
代码:
//创建图片node
SCNPlane *plane = [SCNPlane planeWithWidth:10 height:10];
plane.firstMaterial.diffuse.contents = [UIImage imageNamed:@"1"];
SCNNode *planeNode = [SCNNode nodeWithGeometry:plane];
planeNode.position =SCNVector3Make(0, 0, 0);
[self.scnView.scene.rootNode addChildNode:planeNode];
//左右摇摆动画
SCNAction *action = [SCNAction rotateToX:0 y:0 z:0.5 duration:0.5];
SCNAction *action1 = [SCNAction rotateToX:0 y:0 z:-0.5 duration:0.5];
SCNAction *sequence =[SCNAction sequence:@[action,action1]];
//上下移动动画
SCNAction *action2 = [SCNAction moveTo:SCNVector3Make(0, 10, 0) duration:0.5];
SCNAction *action3 = [SCNAction moveTo:SCNVector3Make(0, -10, 0) duration:0.5];
SCNAction *sequence2 =[SCNAction sequence:@[action2,action3]];
//动画组
SCNAction *group = [SCNAction group:@[sequence,sequence2]];
//永久执行
[planeNode runAction:[SCNAction repeatActionForever:group]];
网友评论