如何递归执行view的动画
效果:
山寨的源头:
图片素材:
源码:
//
// ViewController.m
// RepeatAnimationView
//
// Created by YouXianMing on 15/1/30.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic) CGRect startRect;
@property (nonatomic) CGRect centerRect;
@property (nonatomic) CGRect endRect;
@property (nonatomic) CGFloat distanceFromStartToCenter;
@property (nonatomic) CGFloat distanceFromCenterToEnd;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.distanceFromStartToCenter = 40.f;
self.distanceFromCenterToEnd = 30.f;
// 背景色
self.view.backgroundColor = [UIColor blackColor];
// 红色图片
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"red"]];
self.imageView.center = self.view.center;
self.imageView.alpha = 0;
[self.view addSubview:self.imageView];
// 设置rect
self.startRect = self.imageView.frame;
CGRect tmpRect = self.startRect;
tmpRect.origin.y -= self.distanceFromStartToCenter;
self.centerRect = tmpRect;
tmpRect = self.centerRect;
tmpRect.origin.y -= self.distanceFromCenterToEnd;
self.endRect = tmpRect;
// 递归调用
[self doAnimation];
}
- (void)doAnimation {
[UIView animateWithDuration:1.f
delay:0.2f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
self.imageView.alpha = 1.f;
self.imageView.frame = self.centerRect;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5f
delay:0.1f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
self.imageView.alpha = 0.f;
self.imageView.frame = self.endRect;
} completion:^(BOOL finished) {
self.imageView.frame = self.startRect;
[self doAnimation];
}];
}];
}
@end
//
// ViewController.m
// RepeatAnimationView
//
// Created by YouXianMing on 15/1/30.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIImageView *cyanView;
@property (nonatomic) CGRect startRect;
@property (nonatomic) CGRect centerRect;
@property (nonatomic) CGRect endRect;
@property (nonatomic) CGFloat distanceFromStartToCenter;
@property (nonatomic) CGFloat distanceFromCenterToEnd;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.distanceFromStartToCenter = 40.f;
self.distanceFromCenterToEnd = 30.f;
// 背景色
self.view.backgroundColor = [UIColor blackColor];
// 红色图片
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"red"]];
self.imageView.center = self.view.center;
self.imageView.alpha = 0;
[self.view addSubview:self.imageView];
self.cyanView = [[UIImageView alloc] initWithFrame:self.imageView.bounds];
self.cyanView.image = [UIImage imageNamed:@"cyan"];
[self.imageView addSubview:self.cyanView];
// 设置rect
self.startRect = self.imageView.frame;
CGRect tmpRect = self.startRect;
tmpRect.origin.y -= self.distanceFromStartToCenter;
self.centerRect = tmpRect;
tmpRect = self.centerRect;
tmpRect.origin.y -= self.distanceFromCenterToEnd;
self.endRect = tmpRect;
// 递归调用
[self doAnimation];
}
- (void)doAnimation {
[UIView animateWithDuration:1.f
delay:0.2f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
self.imageView.alpha = 1.f;
self.imageView.frame = self.centerRect;
self.cyanView.alpha = 0.5;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5f
delay:0.1f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
self.imageView.alpha = 0.f;
self.imageView.frame = self.endRect;
self.cyanView.alpha = 0.f;
} completion:^(BOOL finished) {
self.imageView.frame = self.startRect;
self.cyanView.alpha = 1.f;
[self doAnimation];
}];
}];
}
@end