2011-07-11 92 views
2

我試圖檢測每秒創建的下降/動畫UIImageView與NSTimer之間的衝突。以下是代碼:檢測多個具有相同名稱的動畫的UIImageView之間的衝突

-(void)newobject{ 

    int randomx = 76+ arc4random() %(290); 
    int randomDuration = 2+ arc4random() %(6); 
    int randomImage = 1+ arc4random() %(3) ; 

    NewObject = [[UIImageView alloc] initWithFrame:CGRectMake(randomx,0,36 ,36)];   
    UIImage *imag = [UIImage imageNamed:@"ball.png"]; 
    [NewObject setImage:imag]; 
    [self.view addSubview:NewObject]; 

    numberofObjects += 1; 
    NewObject.tag = numberofObjects; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:randomDuration]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDone:finished:context:)]; 
    NewObject.frame = CGRectMake(randomx, 300,NewObject.frame.size.width,NewObject.frame.size.height); 

    [UIView commitAnimations]; 
} 

該代碼創建一個名爲NewObject的新UIImageView,並在屏幕上將其動畫化。爲了檢測碰撞,我有另一個NSTimer,每1.0/60調用一次。下面的代碼:

-(void)Collison{ 

    for (int i = 1; i < numberofObjects; i++) { 
     UIImageView *image = NewObject; 

     [image viewWithTag:i]; 
     CALayer *layer = image.layer.presentationLayer; 
     CGRect NewObjectFrame = layer.frame; 
     CALayer *layer2 = Sprint.layer.presentationLayer; 
     CGRect SprintFrame = layer2.frame; 

     if (CGRectIntersectsRect(NewObjectFrame, SprintFrame)) { 
      [self StopTimers]; 

      NSLog(@"hello"); 
     } 
    } 
} 

的問題是,控制檯說:「它的工作原理」,但UIImage的沒有衝突,我可以碰撞圖像中的字符,但控制檯說什麼,並在同一時間,如果我嘗試將其與UIImageView的作用相沖突。我想說的是它不可靠。有人可以幫忙嗎?

更新:我編輯了代碼,但現在它檢測到最後添加的uiimageview。

+0

NewObject是一個實例變量嗎?你不應該跟蹤你創建的每個NewObject,例如通過將它們存儲在一個NSMutableArray中並遍歷整個數組來查找衝突? – Ziconic

+0

是的,我在想,但問題是如何將NewObject添加到具有不同名稱的NSMutableArray,例如newObject1,NewObject2 .....以識別碰撞的對象。回答你的第一個問題是它是一個實例變量。 –

+0

如何創建一個包含UIImageView和NSString的新類?然後您將使用NSString爲每個對象分配一個唯一的標識符。 – Ziconic

回答

0

好吧,我明白了。這很簡單,所以你需要做的就是製作一個NSMutableArray,並檢查數組是否與for循環衝突。

相關問題