方法一:利用NSMutableArray來實現
NSMutable *array;全局變量,在.m文件中用定時器調用
-(void)down{ static int jianGe = 0; jianGe++; if (jianGe > 2) { jianGe = 0; [self snowState]; } [self snowDown]; } -(void)snowState{ for (int i = 0; i < [array count]; i++) { MyImageView *img = [array objectAtIndex:i]; if (img.tag == 0) { img.tag = 1; [self.view addSubview:img]; break;//提取雪花單片 } } } -(void)snowDown{ for (int i = 0; i < [array count]; i++) { MyImageView *img = [array objectAtIndex:i]; if (img.tag == 1) { img.center = CGPointMake(img.center.x, img.center.y+10); if (img.center.y > 480+25) { img.tag = 0; img.center = CGPointMake(arc4random()%370 - 50, -50); } } } }
方法二:利用幀動畫
用定時器調用
//ViewController.m -(void)snowDown{//動畫效果 UIImageView *iv = [[UIImageView alloc]init]; int a = arc4random()%51;//雪花大小隨機(0~50) iv.frame = CGRectMake(arc4random()%370 - 50, -50, a, a); iv.image = [UIImage imageNamed:@"flake"]; [self.view addSubview:iv]; [UIView beginAnimations:nil context:(__bridge void *)(iv)]; [UIView setAnimationDuration:5]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; iv.frame = CGRectMake(arc4random()%370 - 50, 440, a, a); [UIView commitAnimations]; } -(void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context//到底部消除 { UIImageView *image = (__bridge UIImageView *)context; [image removeFromSuperview]; }
幀動畫比用NSMutableArray要簡潔,易懂