模拟炮弹动画效果,平移动画

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

知识点:(难点)

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

1,循环创建等间距的View

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

3,定时器

4,循环执行

5,循环执行平移

6,加速和减速

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

//

//  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

时间: 2024-10-20 00:40:13

模拟炮弹动画效果,平移动画的相关文章

android旋转动画和平移动画详解,补充说一下如果制作gif动画放到csdn博客上

先上效果图: 我这里用的是GifCam来制作的gif动画,可以在http://download.csdn.net/detail/baidu_nod/7628461下载, 制作过程是先起一个模拟器,然后把GifCam的框拖到模拟器上面,点击Rec的new先,然后点击Rec,然后就save到本地成gif文件 这里做一个左右旋转,上下旋转,和左右移动的动画,先自己建立一个View的类,作为操作的对象: public class MyView extends View { private Paint m

Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持两种动画:补间动画和属性动画,至于这两种动画的区别这里不再介绍,希望开发者都能在使用的过程中体会两者的不同. 本文使用属性动画完成,说到属性动画,肯定要提到 JakeWharton大神写的NineOldAndroids动画库,如果你的app需要在android3.0以下使用属性动画,那么这个库就很有作用了,如果只需要在高版本使用,那么直接

动画效果-基础动画设置(改变大小,改变透明度,翻转,旋转,复原)

在可视化编程下 #import "BaseViewController.h" @interface BaseViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation BaseViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWar

Object-C 里面的animation动画效果,核心动画

#import "CoreAnimationViewController.h" @interface CoreAnimationViewController ()@property(nonatomic, strong)UIView *myView; @end @implementation CoreAnimationViewController - (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundCo

iOS开发——动画篇Swift篇&amp;动画效果的实现

Swift - 动画效果的实现 在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用animateWithDuration来实现动画 (1)此方法共有5个参数: duration:动画从开始到结束的持续时间,单位是秒 delay:动画开始前等待的时间 options:动画执行的选项.里面可以设置动画的效果.可以使用UIViewAnimationOpt

Android开发之动画效果浅析

Android开发之动画效果浅析 请尊重他人的劳动成果,转载请注明出处:Android开发之动画效果浅析 程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animation.下面依次介绍一下各个动画. 1.   补间动画(Tween) Tween动画,通过对View 的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可

Android学习——Animation动画效果

1.Android动画模式: 1>tweened animation: 渐变动画: 2>frame by frame: 画面转换动画. 2.Android的Animation动画由四种类型组成: XML alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 Java代码 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimat

Android动画效果之Tween Animation(补间动画)(一)

前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation(补间动画). Tween Animation(补间动画): Tween动画,通过对View的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可以采用XML来做也可以采用编码来做. 动画类型 XML配置方式 Java代码实现方式 渐变透明度动画效果 <al

Swift - 动画效果的实现方法总结(附样例)

在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用animateWithDuration来实现动画 (1)此方法共有5个参数: duration:动画从开始到结束的持续时间,单位是秒 delay:动画开始前等待的时间 options:动画执行的选项.里面可以设置动画的效果.可以使用UIViewAnimationOptions类提供的各种预置效果 a