2012-06-07 91 views
1

你好,我是新來的動畫,剛剛開始玩它。我想要顯示一個從小環到大環的圓圈(戒指),然後消失,然後重新完成整個過程,除了在不同的位置。在隨機視圖中的不同位置生成動畫

爲此,我創建了6個不同圖像大小的同一個環。下面的代碼是我如何做到這一點,但我不知道如何重複該過程(AkA它運行的方法,但環的位置保持不變,我需要循環的隨機數發生器,但不知道什麼時候檢查圖像是否停止)。如果這不是正確的做法,請告訴我!附:這個戒指到達最大舞臺時看起來非常難看,不知道爲什麼。

感謝

-(void) doWork 
{ 

NSInteger number; 
NSInteger number2; 
NSLog (@"here"); 

number = (arc4random()%100)+1; 
number2 = (arc4random()%100)+1; 
NSLog (@" hello numer1: %d", number); 
NSLog (@" hello numer2: %d", number2); 

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(number, number2, 135, 135)]; 

imageView.animationImages= [NSArray arrayWithObjects: 
          [UIImage imageNamed:@"smallestRing.png"], 
          [UIImage imageNamed:@"smallRing.png"], 
          [UIImage imageNamed:@"mediumRing.png"], 
          [UIImage imageNamed:@"large2Ring.png"], 
          [UIImage imageNamed:@"largeRing.png"], nil]; 

imageView.animationDuration= 2.5; 
imageView.animationRepeatCount= 0; 
imageView.contentMode = UIViewContentModeScaleAspectFit; 

[imageView startAnimating]; 
[self.view addSubview:imageView]; 

/*[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(doWork) userInfo:nil repeats:YES];*/ 

} 

回答

1

如果調整(或旋轉或其它轉型改造等)是你需要的,你可以使用方法+ animateWithDuration唯一的動畫(你可以找到描述here

它會看起來像:

-(void) doWork 
{ 

NSInteger number; 
NSInteger number2; 
NSLog (@"here"); 

number = (arc4random()%100)+1; 
number2 = (arc4random()%100)+1; 
NSLog (@" hello numer1: %d", number); 
NSLog (@" hello numer2: %d", number2); 

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(number, number2, 135, 135)]; 

imageView.image = [UIImage imageNamed:@"largeRing.png"]; 
[self.view addSubview:imageView]; 

[self animate:imageView enlarge:YES]; 
} 

-(void) animate:(UIImageView*)imageView enlarge:(BOOL)flag 
{ 
if (flag) 
{ 
// then animating is starting 
// and imageView will appear in random point of view 
    int randomX = arc4random()%self.view.frame.size.width; 
    int randomY = arc4random()%self.view.frame.size.height; 
    imageView.center = CGPointMake(randomX, randomY); 
} 

double scale = flag ? 2 : 0.5; 
[UIView animateWithDuration:5 
     animations:^{ imageView.transform = CGAffineTransformMakeScale(scale,scale); } 
     completion:^(BOOL finished){ [self animate:imageView: enlarge:!flag]; }]; 
} 
+0

我喜歡它給人的動畫,它的清潔。感謝您的幫助,但每次動畫完成後,它都不會將圓圈放到屏幕上的任意位置。你知道如何做到這一點?謝謝。無論如何將接受 –

+0

編輯代碼來達到此目的:當調用方法-animate時,如果標誌爲YES,則意味着動畫將啓動,因此我們將imageView的中心設置爲self.view的隨機點。你可以把它改成「if(flag == NO)」,在動畫結束後把圓圈放入隨機點,但是第一次不會在隨機點 – medvedNick

+0

非常感謝,非常感謝。如果你可以告訴我最後一件事,我怎麼能停止動畫?具體來說,當視圖正在卸載(它似乎正在拿走很多CPU ...)。謝謝 –

1

你可以查詢布爾isAnimating爲了確定是否UIImageView的動畫結束

P.S: 也許這看起來很難看,因爲

imageView.contentMode = UIViewContentModeScaleAspectFit; 

試着這麼做

imageView.contentMode = UIViewContentModeCenter;