碰撞

2011-06-28 241 views
0

這裏是我的代碼:碰撞

-(void)collision { 
    if(CGRectIntersectsRect(ball.frame,center.frame)) { 
     center.alpha=0.1; 
    } 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:7.0f]; 
    [ball setCenter:CGPointMake(200, 100)]; 
    [UIView commitAnimations]; 
    [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(collision) userInfo:nil repeats:YES]; 
} 

我的問題是,當viewDidLoad中「center.alpha = 0.1」,但「中心」和「球」還沒有發生碰撞,我不知道爲什麼,我認爲這是由於動畫。

回答

0

您正在調度在viewDidLoad結束處執行該行後0.01秒的衝突調用。但視圖尚未顯示,因此顯示視圖可能需要超過0.01秒的時間。

嘗試viewDidAppear

說了這麼多,我覺得你是不是在iOS上animtions的目的明確。這些不是用於計算碰撞檢測 - 它們只是用於在設定的時間內從起點移動到終點。我建議你閱讀動畫系統上的Apple文檔。

+0

是的,但如果我不使用UIView動畫是非常困難的。由於「imageView」是在隨機位置創建的,它移動到屏幕的中心,因此如何使用定時器來做到這一點非常困難。 –

+0

我認爲你需要更多地描述你想要達到的目標。您的問題(例如初始化球和中心位置)缺少代碼,這有助於回答您的原始問題。但我認爲你真正的問題可能是你正在嘗試解決問題的方法。 –

+0

我的代碼在這裏:http://stackoverflow.com/questions/6505834/replace-a-uiview-animation-by-a-timer-animation –

1

雖然動畫需要7秒,但是[ball setCenter:CGPointMake(200, 100)];會立即設置,因此- (void)collision可能會在「ball」與動畫中的「center」相交之前將您的alpha設置爲0.1。

而不是UIView動畫,你可以使用NSTimer緩慢地改變「球」的中心。

+0

是的但我不想使用NSTimer,因爲我的程序必須使用UIView動畫是否有另一種解決方案? –

+0

你只能得到一個UIView動畫的開始和結束位置,所以你可能只是不能使用UIView動畫進行碰撞檢測 – Sascha

+0

是的,但是如果我不使用UIView動畫,那就很難了。因爲「imageView」是在隨機位置創建的,並且它移動到屏幕的中心,所以你怎麼用定時器來做到這一點。你有解決方案嗎 ? –