2012-12-10 21 views
1

試圖製作一個小型的攻牙遊戲,在那裏你有一個正方形的網格,並需要按不同的順序點擊它們。偶爾這些方塊會互換位置。在兩點間移動UIButton的正確方法?

我覺得我需要把每個正方形的位置放到一個數組中。然後,當需要移動的時候,從當前位置移動到從數組中隨機選擇的位置,然後刪除數組中的位置,以免在同一位置出現多個按鈕。

不幸的是,我甚至無法讓UIButton移動,更不用說在兩個位置之間進行插值了。

目前,這將移動按鈕:

-(IBAction)button:(id)sender 
{ 
    button.center = CGPointMake(200, 200); 
} 

但我不希望它這樣的工作,我希望它的工作是這樣的,它不工作:

if (allButtonsPressed == YES) 
{ 
    button.center = CGPointMake(200, 200); 
} 

它不會連招,如果放在這樣的:

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    button.center = CGPointMake(200, 200); 
} 

爲了清楚起見,該按鈕通過Interface Builder中添加,並且所有這些情況在做其他事情時都起作用,所以我猜UIButton需要以特定方式移動/動畫?

回答

12

viewDidLoad發生在視圖可見之前,因此它只會移動而不是動畫。你可以嘗試把它放在viewDidAppear方法中。

你可以用UIView動畫塊來包裝東西,如果你想讓它們動畫而不是閃爍到位。

[UIView animateWithDuration:0.5 animations:^{ 
    button.center = CGPointMake(200.0, 200.0); 
}]; 

由於您使用的是界面生成器,我假設您使用的屬性來跟蹤按鈕。如果你只使用幾個按鈕,這可以工作,但我期望在遊戲中這些按鈕會改變,所以你可能想要移動到代碼或至少使用IBOutletCollections來跟蹤按鈕。

雨燕3.0

UIView.animate(withDuration: 0.5) { [weak self] in 
    self?.button.center = CGPoint(x: 200, y: 200) 
} 
+0

這似乎是工作,但是當我按下不同的按鈕它彈回它在哪裏。我可能會有一些雜亂的代碼這樣做,但只是爲了檢查,您的解決方案是簡單地爲某個位置設置動畫,還是爲位置設置動畫並將其設置爲新位置? –

+0

此代碼將設置爲動畫。所以如果你在動畫中間檢查它,你甚至可以在它出現之前得到新的幀。但是它將一直存在,除非你指定了一個UIViewAnimationOptionAutoReverse。所以我懷疑你有一些雜亂的代碼。 –

+0

如果您檢查UIView文檔,實際上有很多UIViewAnimation的選項,包括從任何地方開始的完成塊和選項,或排隊動畫。 –

相關問題