iOS学习笔记(六)————图片动画与九宫格

/ 0评 / 0

在之前做雪花下落的时候我们用到了定时器让雪花下落,然后使用UIView动画让雪花在下落的过程中移动。今天看一下另一种简单的图片动画。

我们先以火焰燃烧的效果为例,先看一下效果:

firenow

来看实现:

//现在头文件中声明一个图片视图的全局变量
@interface ViewController (){
    UIImageView *imageView;
}
@end

- (void)animationFire1{
    //    1.创建视图对象
    imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    imageView.image = [UIImage imageNamed:@"campFire01.gif"];
    [self.view addSubview:imageView];

    //    开启定时器
    [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(animationFire1OnTimer) userInfo:nil repeats:YES];
    
}

static int i = 0;

- (void)animationFire1OnTimer{
    i++;
    imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"campFire%02d.gif",i]];
    if (i == 17) {
        i=0;
    }
}

这里我们依然是使用的是定时器,在定时器每次执行的时候改变图片视图中的图片内容,就造成了视觉上的效果,我们这里是每次在定时器里读取资源文件,可以做一下调整,将资源文件先读进内存中在执行:

//先创建一个数组
@interface ViewController (){
    UIImageView *imageView;
    NSMutableArray *array;
}
@end

- (void)animationFire2{
    [super viewDidLoad];
    //    1.创建视图对象
    imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    imageView.image = [UIImage imageNamed:@"campFire01.gif"];
    [self.view addSubview:imageView];
    
    array = [[NSMutableArray alloc] initWithCapacity:0];
    for (int i = 1; i < 18; i++){
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"campFire%02d.gif",i]];
        [array addObject:image];
    }
    
    //    开启定时器
    [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(animationFire2OnTimer) userInfo:nil repeats:YES];
}

static int i = 0;

- (void)animationFire2OnTimer{
    imageView.image = [array objectAtIndex:i];
    i++;
    if (i>=17){
        i = i%17;
    }
}

这里的效果是一样的,但是其实系统给我提供了一些方法来实现这种效果,来看一下我们将要做的简单打飞机中用到的动画:

//现在头文件中声明一个图片视图的全局变量
@interface ViewController (){
    UIImageView *imageView;
}
@end

- (void)animationPlaneBoom{
    self.view.backgroundColor = [UIColor grayColor];
    
    //创建图片数组
    NSArray *imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"DJBob1"],[UIImage imageNamed:@"DJBob2"],[UIImage imageNamed:@"DJBob3"],nil];
    
    
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
    //设置图片的数组
    imageView.animationImages = imageArray;
    //设置一个循环的持续时间
    imageView.animationDuration = 0.5;
    //设置重复的次数
    imageView.animationRepeatCount = 0;
    [self.view addSubview:imageView];
    //开始动画
    [imageView startAnimating];
}

其实就是三张图片连续变换,造成了飞机爆照的效果

planeboom

以上就是简单的图片动画实现,其实就是大量图片的变换而已。

九宫格使我们常用的一种UI排布算法,现在很多的软件界面都在使用九宫格排布,我们先看一下九宫格的实现思路

九宫格

下面我们看一下九宫格的算法的实现

- (void)nineButtons{
    //    获取每个间隔的大小
    float xInterval = (320 - 3*50)/4;
    float yInterval = (480 - 3*50)/4;
    
    
    for (int i = 0; i < 9; i++){
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    
        //   0 1 2 3 4 5 6 7 8
        //对3 取余   i%3
        //   0 1 2 0 1 2 0 1 2
        //  对3取整  i/3
        //   0 0 0 1 1 1 2 2 2
        
        //   考虑 间隔 + 组合的个数
        float x = xInterval + i%3*(xInterval + 50);
        float y = yInterval + i/3*(yInterval + 50);
        
        btn.frame = CGRectMake(x, y, 50, 50);
        [btn setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
        btn.backgroundColor = [UIColor purpleColor];
        [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        btn.tag = i;
        [self.view addSubview:btn];
        
    }
}

- (void)btnClick:(UIButton *)sender{
    NSLog(@"点击了按钮%ld",sender.tag);
}

最终我们得到的九宫格视图如下

ninebuttons

原理很简单吧~

代码请查看 http://git.oschina.net/zcb1603999/LearningiOS

评论已关闭。