#define SNOW_IMAGENAME @"snow" #define IMAGE_X arc4random()%(int)Main_Screen_Width #define IMAGE_ALPHA ((float)(arc4random()%10))/10 #define IMAGE_WIDTH arc4random()%20 + 10 #define PLUS_HEIGHT Main_Screen_Height/25 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _imagesArray = [[NSMutableArray alloc] init]; for (int i = 0; i < 20; ++ i) { UIImageView *imageView = [[UIImageView alloc] initWithImage:IMAGENAMED(SNOW_IMAGENAME)]; float x = IMAGE_WIDTH; imageView.frame = CGRectMake(IMAGE_X, -30, x, x); imageView.alpha = IMAGE_ALPHA; [self.view addSubview:imageView]; [_imagesArray addObject:imageView]; } [NSTimer scheduledTimerWithTimeInterval:.3 target:self selector:@selector(makeSnow) userInfo:nil repeats:YES]; } static int i = 0; - (void)makeSnow { i = i + 1; if ([_imagesArray count] > 0) { UIImageView *imageView = [_imagesArray objectAtIndex:0]; imageView.tag = i; [_imagesArray removeObjectAtIndex:0]; [self snowFall:imageView]; } } - (void)snowFall:(UIImageView *)aImageView { [UIView beginAnimations:[NSString stringWithFormat:@"%i",aImageView.tag] context:nil]; [UIView setAnimationDuration:6]; [UIView setAnimationDelegate:self]; aImageView.frame = CGRectMake(aImageView.frame.origin.x, Main_Screen_Height, aImageView.frame.size.width, aImageView.frame.size.height); NSLog(@"%@",aImageView); [UIView commitAnimations]; } - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { UIImageView *imageView = (UIImageView *)[self.view viewWithTag:[animationID intValue]]; float x = IMAGE_WIDTH; imageView.frame = CGRectMake(IMAGE_X, -30, x, x); [_imagesArray addObject:imageView]; }
// 来自Code4App上的一个Demo
原文:http://www.cnblogs.com/joesen/p/3586624.html