Animation Timing

一:Animation Timing Curves

 

1:Linear Animation Timing

 

2:Ease-In Animation Timing

 

3:Ease-Out Animation Timing

 

4:Ease-In Ease-Out Animation Timing

5:Custom Animation Timing

 

 自定义动画执行曲线设置

We create a custom timing with the initWithControlPoints:::: method on CAMediaTimingFunction like this:

- (CAMediaTimingFunction *)getTimingFunction {
        CGFloat c1x = 0.5;
        CGFloat c1y = 1.0;
        CGFloat c2x = 0.5;
        CGFloat c2y = 0.0;
      return [[CAMediaTimingFunction alloc    initWithControlPoints:cx1 :cy1 :cx2 :cy2];
}

 

写道
Since the initial and final values are already known (recall that they are {0, 0} and {1, 1}, respectively), we have to specify only the control
points. In our example, we set the first control point to {0.5, 1.0} and the second control point to {0.5, 0.0}.

 

-(void)setupMover {
        NSRect bounds = self.bounds;
         NSRect moverFrame =NSInsetRect(bounds, NSWidth(bounds) / 4.0f,NSHeight(bounds) / 4.0f);
        moverFrame.origin.x = 0.0f;
mover = [[NSImageView alloc] initWithFrame:moverFrame];
[mover setImageScaling:NSScaleToFit];
[mover setImage:[NSImage imageNamed:@"photo.jpg" ]];
[self addSubview:mover];
}
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setupMover];
}
return self;
}

- (BOOL)acceptsFirstResponder {
return YES;
}
- (void)keyDown:(NSEvent *)event {
[self move];
}

- (CABasicAnimation *)moveAnimation {
if(nil == moveAnimation) {
moveAnimation = [CABasicAnimation animation];
moveAnimation.duration = 2.0f;
moveAnimation.timingFunction =
[[CAMediaTimingFunction alloc]
initWithControlPoints:0.5 :1.0 :0.5 :0.0];
}
return moveAnimation;
}
- (void)move {
NSDictionary *animations = [NSDictionary
dictionaryWithObject:[self moveAnimation]
forKey:@"frameOrigin" ];
[mover setAnimations:animations];
NSPoint origin = mover.frame.origin;
origin.x += NSWidth(mover.frame);
[mover.animator setFrameOrigin:origin];
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值