• 【源码】模拟炮弹动画效果,平移动画


    本程序是模拟子弹无限的弹出平移的动画效果

    知识点:(难点)

    0,masony自适应布局(下载地址:https://github.com/Masonry/Masonry)

    1,循环创建等间距的View

    2,向可变数组中添加和取出这些View

    3,定时器

    4,循环执行

    5,循环执行平移

    6,加速和减速

    感谢金JML小姐的无私帮助,接下来直接上代码:

    //

    //  ViewController.m

    //  模拟炮弹的实现

    //

    //  Created by WBapple on 16/8/23.

    //  Copyright © 2016年 王彬iOS开发者. All rights reserved.

    //

    #import "ViewController.h"

    //适配

    #import "Masonry.h"

    #define MAS_SHORTHAND

    #define MAS_SHORTHAND_GLOBALS

    //按照iPhone6屏幕尺寸适配

    // 转换宽度像素,将1080P转换成750P

    #define changePixelW(P) (P / 1080.0) * 750.0

    // 转换高度像素,将1080P转换成750P

    #define changePixelH(P) (P / 1920.0) * 1334.0

    // 将像素转换为点-宽度

    #define pixelToPonitW(P) changePixelW(P) / 2.0

    // 将像素转换为点-高度

    #define pixelToPonitH(P) changePixelH(P) / 2.0

    // 屏幕大小

    #define kScreen [[UIScreen mainScreen] bounds]

    // 屏幕宽度

    #define kScreenW [[UIScreen mainScreen] bounds].size.width

    // 屏幕高度

    #define kScreenH [[UIScreen mainScreen] bounds].size.height

    // 适配屏幕高度

    #define FITHEIGHT(H)

        (pixelToPonitH(H)) / 667.0 * ([UIScreen mainScreen].bounds.size.height)

    // 适配屏幕宽度

    #define FITWIDTH(W)

        (pixelToPonitW(W)) / 375.0 * ([UIScreen mainScreen].bounds.size.width)

    // 根据设备型号设置字体大小

    #define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

    #define iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

    //字体大小适配

    #define pixelToFontsize(P) (iPhone6P ? (P / 2.0 / 96.0 * 72.0) : (iPhone6 ? (P / 1.2 / 2.0 / 96.0 * 72.0) : (P / 1.3 / 2.0 / 96.0 * 72.0)))

    // 将像素转换为点-圆角

    #define svCornerRadius(P) changePixelW(P) / 2.0

    // 状态栏的高度

    #define statusBarH [[UIApplication sharedApplication] statusBarFrame].size.height

    //电池栏高度

    #define StatusBarH [UIApplication sharedApplication].statusBarFrame.size.height

    //导航栏高度

    //#define NavBarH       [UINavigationBar appearance].frame.size.height

    #define NavBarH self.navigationController.navigationBar.height

    @interface ViewController ()

    @end

    @implementation ViewController {

        NSMutableArray* array;

        UIView* view;

        BOOL jay;

        float speed;

    }

    - (void)viewDidLoad

    {

        //

        UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(100, 0, 200, 200)];

        label.text = @"点击屏幕出现子弹";

        [self.view addSubview:label];

        //

        UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(30, 550, 150, 40)];

        [button setTitle:@"加速" forState:UIControlStateNormal];

        button.backgroundColor = [UIColor redColor];

        button.titleLabel.font = [UIFont systemFontOfSize:pixelToFontsize(45)];

        button.layer.cornerRadius = svCornerRadius(12);

        [button addTarget:self

                      action:@selector(jiasu)

            forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:button];

        //

        UIButton* button2 = [[UIButton alloc] initWithFrame:CGRectMake(200, 550, 150, 40)];

        [button2 setTitle:@"减速" forState:UIControlStateNormal];

        button2.backgroundColor = [UIColor blueColor];

        button2.titleLabel.font = [UIFont systemFontOfSize:pixelToFontsize(45)];

        button2.layer.cornerRadius = svCornerRadius(12);

        [button2 addTarget:self

                      action:@selector(jiansu)

            forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:button2];

        //创建可变数组

        array = [[NSMutableArray alloc] init];

        [super viewDidLoad];

        //创建炮弹

        for (int i = 0; i < 1000; i++) {

            view = [[UIView alloc] init];

            view.backgroundColor = [UIColor redColor];

            [self.view addSubview:view];

            [view mas_makeConstraints:^(MASConstraintMaker* make) {

                make.height.mas_equalTo(FITHEIGHT(30));

                make.width.mas_equalTo(FITHEIGHT(30));

                make.left.mas_equalTo(self.view.mas_left).with.offset(-FITHEIGHT(60000) + FITHEIGHT(60) * i);

                make.centerY.equalTo(self.view);

            }];

            //把创建的View逐一添加到可变数组中

            [array addObject:view];

        }

        //创建定时器

        NSTimer* timer = [NSTimer timerWithTimeInterval:0.1

                                                 target:self

                                               selector:@selector(changeViewframe)

                                               userInfo:nil

                                                repeats:YES];

        // runloop循环执行

        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

        //speed默认值

        speed = 10;

    }

    - (void)changeViewframe

    {

        CGAffineTransform ttransform;

        for (int i = 0; i < array.count; i++) {

            UIImageView* image = array[i];

            if (!jay) {

                ttransform = CGAffineTransformTranslate(image.transform, FITWIDTH(speed), 0);

                image.transform = ttransform;

                jay = YES;

            }

            else {

                ttransform = CGAffineTransformTranslate(image.transform, FITWIDTH(speed), 0);

                image.transform = ttransform;

                jay = NO;

            }

        }

    }

    - (void)jiasu

    {

        speed += 10;

    }

    - (void)jiansu

    {

        speed -= 10;

    }

    - (void)didReceiveMemoryWarning

    {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

    @end

  • 相关阅读:
    hdu 3336 Count the string KMP+DP优化
    Codeforces Round #345 (Div. 1) A. Watchmen 模拟加点
    Codeforces Round #345 (Div. 1) B. Image Preview
    大数据时代下EDM邮件营销的变革
    如何选择EDM电子邮件服务提供商
    一般邮件营销平台可以获取的三个参数
    EDM邮件营销真的落伍了吗?
    EDM概念之A/B分类测试法
    EDM营销技巧之如何进行用户唤醒
    如何优化电子邮件营销的效果
  • 原文地址:https://www.cnblogs.com/wangbinios/p/5801344.html
Copyright © 2020-2023  润新知