设为首页 加入收藏

TOP

POP缩放动画
2017-10-13 10:23:52 】 浏览:2073
Tags:POP 缩放 动画

POP缩放动画

 

效果

 

源码

https://github.com/YouXianMing/Animations

//
//  SpringScaleViewController.m
//  Animations
//
//  Created by YouXianMing on 16/6/3.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "SpringScaleViewController.h"
#import "UIView+SetRect.h"
#import "UIFont+Fonts.h"
#import "GCD.h"
#import "POP.h"

@interface SpringScaleViewController ()

@property (nonatomic, strong) UIView *scaleView;

@end

@implementation SpringScaleViewController

- (void)setup {

    [super setup];
    
    // Label
    UILabel *label = [[UILabel alloc] init];
    label.text     = @"P   P";
    label.font     = [UIFont HYQiHeiWithFontSize:140];
    [label sizeToFit];
    label.center   = self.contentView.middlePoint;
    [self.contentView addSubview:label];
    
    // Circle
    self.scaleView                    = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    self.scaleView.backgroundColor    = [[UIColor colorWithRed:0.203  green:0.598  blue:0.859 alpha:1] colorWithAlphaComponent:0.95f];
    self.scaleView.layer.cornerRadius = self.scaleView.width / 2.f;
    self.scaleView.center             = self.contentView.middlePoint;
    [self.contentView addSubview:self.scaleView];
    
    // Start animation after 1 second.
    [GCDQueue executeInMainQueue:^{
        
        [self scaleAnimation];
        
    } afterDelaySecs:1.f];
}

- (void)scaleAnimation {

    POPBasicAnimation *scaleAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewScaleXY];
    
    scaleAnimation.name               = @"scaleSmallAnimation";
    scaleAnimation.delegate           = self;
    
    scaleAnimation.duration           = 0.15f;
    scaleAnimation.toValue            = [NSValue valueWithCGPoint:CGPointMake(1.25, 1.25)];\
    
    [self.scaleView pop_addAnimation:scaleAnimation forKey:nil];
}

- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished {

    if ([anim.name isEqualToString:@"scaleSmallAnimation"]) {
        
        POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewScaleXY];
        
        scaleAnimation.name                = @"SpringAnimation";
        scaleAnimation.delegate            = self;
        
        scaleAnimation.toValue             = [NSValue valueWithCGPoint:CGPointMake(1, 1)];
        scaleAnimation.velocity            = [NSValue valueWithCGPoint:CGPointMake(-2, -2)];
        scaleAnimation.springBounciness    = 20.f;
        scaleAnimation.springSpeed         = 10.f;
        scaleAnimation.dynamicsTension     = 700.f;
        scaleAnimation.dynamicsFriction    = 7.f;
        scaleAnimation.dynamicsMass        = 3.f;
        
        [self.scaleView pop_addAnimation:scaleAnimation forKey:nil];
        
    } else if ([anim.name isEqualToString:@"SpringAnimation"]) {
    
        [self performSelector:@selector(scaleAnimation) withObject:nil afterDelay:1];
    }
}

- (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];
    
    [[self class] cancelPreviousPerformRequestsWithTarget:self];
}

@end

 

细节

1. 参数设置有技巧,可以参考如下所示(项目中的POPSpringParameterController):

2. 动画效果是通过组合两个动画而来的,要注意设置代理:

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Xcode安装插件,错误选择了Skip Bu.. 下一篇APP上架证书无效:解决

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目