對於非自動佈局故事板/粒,你的代碼是好的。順便說一句,它現在一般建議您動畫使用blocks:
[UIView animateWithDuration:3.0
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0);
}];
或者,如果你想在選項之類多一點的控制,你可以使用:
[UIView animateWithDuration:3.0
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100);
}
completion:nil];
但你的代碼如果你不使用自動佈局應該工作。只是上面的語法是iOS 4及更高版本的首選。
如果您使用自動佈局,(a)您爲您的垂直空間約束創建IBOutlet
(見下文),然後(B),你可以這樣做:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
static BOOL logoAlreadyMoved = NO; // or have an instance variable
if (!logoAlreadyMoved)
{
logoAlreadyMoved = YES; // set this first, in case this method is called again
self.imageVerticalSpaceConstraint.constant -= 100.0;
[UIView animateWithDuration:3.0 animations:^{
[self.view layoutIfNeeded];
}];
}
}
要添加IBOutlet
爲約束,只是控制從約束到您的.h在助理編輯 -drag:
順便說一句,如果你是動畫約束,b e對任何其他您可能鏈接到該圖像視圖的約束都很敏感。通常情況下,如果你在圖片下方放置了一些東西,它會將圖片的約束關聯起來,所以你可能需要確保你沒有任何其他控件對你的圖片有限制(除非你想讓它們移動) 。
如果你可以告訴你使用自動佈局打開你的故事板或NIB,然後選擇「文件檢查器」(最右邊的面板上的第一個選項卡,或者你可以通過按選項拉起 + 命令 + (數字 「1」)):
記住,如果你在支持預iOS 6的策劃,請務必關閉 「自動佈局」。 Autolayout是iOS 6的一項功能,不適用於早期版本的iOS。
來源
2013-01-07 04:47:49
Rob
在viewDidLoad方法中。對於那個很抱歉! –
你在使用自動佈局嗎? – Rob
同意Rob的看法,從你的例子中給出的代碼看來,Auto Layout會影響你的動畫。如果您使用自動佈局,則必須爲約束設置動畫,而不是明確設置框架。 –