2015-01-12 58 views
1

我試圖在按下按鈕時將文本字段向右移動。它工作正常,但是當我點擊另一個文本字段或任何其他元素的文本字段重新出現在其當前位置。我瀏覽了互聯網,發現它可以在我沒有啓用自動佈局的情況下工作,但是我需要自動佈局設置可變位置。有什麼建議?下面是移動框的方法:文本字段在運行動畫後返回到原始位置

- (IBAction)EnterInfo:(id)sender { 
    CGRect newFrame = _UsernameField.frame; 
    newFrame.origin.x += 500; // shift right by 500pts 
    [UIView animateWithDuration:1.0 
        animations:^{ 
         _UsernameField.frame = newFrame; 
        }]; 
} 

的最後一個問題,新的代碼:

- (IBAction)EnterInfo:(id)sender { 
    [UIView animateWithDuration:1.0 
        animations:^{ 
         _usernameX.constant = 130; 
        }]; 
} 

回答

2

如果您有自動佈局開啓,你不能處理這樣的框架。您需要參考NSLayoutConstraint並更新常數。

這樣的:

myXConstraint.constant = originalX + 500; 

編輯 - 然後你的動畫塊應該是這樣的:

[UIView animateWithDuration:0.5 animations:^{ 
    [self.view layoutIfNeeded]; 
}]; 
+0

那麼我將如何訪問_UsernameField的x約束?我無法找到它的.constraint屬性,並且我對約束有非常少的經驗 –

+0

如果您在xib/storyboard中設置約束,則可以使用與創建IBOutlet的方式相同的方式爲約束創建IBOutlet任何其他UI元素。如果你沒有明確地在你的視圖中設置任何約束,現在是時候去做,然後創建你的x位置約束的出口。 – Bek

+0

現在這樣做更有意義!像這樣的自動約束方法是使用動畫做到最好/標準的方法嗎?感謝您的回答,我會在允許時將其設置爲解決方案。 –

相關問題