iOS中弹簧动画Spring

慢动作下动画

iOS中弹簧动画Spring_第1张图片
iOS动画.gif
@implementation DZAnimatedController {
    
    UIView *_view1;
    UIView *_view2;
    UIView *_view3;
    BOOL selected;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"AnimatedController";
    
    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60)];
    view1.backgroundColor = [UIColor greenColor];
    [self.view addSubview:view1];
    [view1.layer setCornerRadius:30];
    [view1.layer setMasksToBounds:YES];
    _view1 = view1;
    _view1.alpha = 0;
  
    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60)];
    view2.backgroundColor = [UIColor blueColor];
    [self.view addSubview:view2];
    [view2.layer setCornerRadius:30];
    [view2.layer setMasksToBounds:YES];
    _view2 = view2;
    _view2.alpha = 0;
    
    UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60)];
    view3.backgroundColor = [UIColor redColor];
    [self.view addSubview:view3];
    [view3.layer setCornerRadius:30];
    [view3.layer setMasksToBounds:YES];
    _view3 = view3;
    _view3.alpha = 0;
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60);
    btn.backgroundColor = [UIColor grayColor];
    [self.view addSubview:btn];
    [btn.layer setCornerRadius:30];
    [btn.layer setMasksToBounds:YES];
    [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
    
    /**
     iOS中的动画就是围绕着UIView的几个属性来玩的, frame, bounds, center, background, transform, alpha, coententStretch,
     iOS中动画的方式有三种:
     1. UIView(UIViewAnimation): 也成首尾式动画
     
     2. UIView(UIViewAnimationWithBlock): block动画, iOS中最常用, 是对首尾式动画的进一步封装.
     
     3. CoreAnimation: 主要作用CALayer
     */
    
    //通过(描述弹簧的运动)时间曲线 来 执行动画, 当阻尼比为1的时候, 该动画 将(没有任何震荡地)平稳的减速到最终的模型值,
    //阻尼比小于1的话,将反复震荡直到完全停止.
    /* Performs `animations` using a timing curve described by the motion of a spring. When `dampingRatio` is 1, the animation will smoothly 

decelerate to its final model values without oscillating. Damping ratios less than 1 will oscillate more and more before coming to a complete stop. 

You can use the initial spring velocity to specify how fast the object at the end of the simulated spring was moving before it was attached. It's a unit 

coordinate system, where 1 is defined as travelling the total animation distance in a second. So if you're changing an object's position by 200pt in 

this animation, and you want the animation to behave as if the object was moving at 100pt/s before the animation started, you'd pass 0.5. You'll 

typically want to pass 0 for the velocity. */

    //timing curve 时间曲线
    //motion of spring 弹簧的运动(移动)
    //dampingRato 阻尼比
    //oscillating 震荡
}

- (void)clickBtn:(UIButton *)btn {
    
    [UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:.4 initialSpringVelocity:.6 options:UIViewAnimationOptionCurveLinear animations:^{

        if(!selected) {
            
            _view1.alpha = 1;
            _view2.alpha = 1;
            _view3.alpha = 1;
            _view1.transform =  CGAffineTransformMakeTranslation(-80, -100);
            _view2.transform = CGAffineTransformMakeTranslation(0, -100);
            _view3.transform = CGAffineTransformMakeTranslation(80, -100);
            
        } else {
            
            _view1.alpha = 0;
            _view2.alpha = 0;
            _view3.alpha = 0;
            _view1.transform = CGAffineTransformIdentity;
            _view2.transform = CGAffineTransformIdentity;
            _view3.transform = CGAffineTransformIdentity;
        }
        [btn setEnabled:NO];
    } completion:^(BOOL finished) {

        selected = !selected;
        [btn setEnabled:YES];
    }];

}

@end
iOS中弹簧动画Spring_第2张图片
iOS动画.gif

你可能感兴趣的:(iOS中弹簧动画Spring)