2013-01-07 57 views
8

我正在嘗試使圖像視圖(以下的logo)向上滑動100個像素。我使用此代碼,但沒有任何反應都:將圖像視圖動畫化以向上滑動

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:3]; 
logo.center = CGPointMake(logo.center.x, logo.center.y - 100); 
[UIView commitAnimations]; 

此代碼是在viewDidLoad方法。具體來說,logo.center = ...不起作用。其他的東西(比如改變alpha)也可以。也許我沒有使用正確的代碼向上滑動它?

+0

在viewDidLoad方法中。對於那個很抱歉! –

+1

你在使用自動佈局嗎? – Rob

+0

同意Rob的看法,從你的例子中給出的代碼看來,Auto Layout會影響你的動畫。如果您使用自動佈局,則必須爲約束設置動畫,而不是明確設置框架。 –

回答

42

對於非自動佈局故事板/粒,你的代碼是好的。順便說一句,它現在一般建議您動畫使用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:

add IBOutlet for vertical constraint

順便說一句,如果你是動畫約束,b e對任何其他您可能鏈接到該圖像視圖的約束都很敏感。通常情況下,如果你在圖片下方放置了一些東西,它會將圖片的約束關聯起來,所以你可能需要確保你沒有任何其他控件對你的圖片有限制(除非你想讓它們移動) 。

如果你可以告訴你使用自動佈局打開你的故事板或NIB,然後選擇「文件檢查器」(最右邊的面板上的第一個選項卡,或者你可以通過按選項拉起 + 命令 + (數字 「1」)):

autolayout on

記住,如果你在支持預iOS 6的策劃,請務必關閉 「自動佈局」。 Autolayout是iOS 6的一項功能,不適用於早期版本的iOS。

+0

使用-50的常數可以將視圖置於屏幕的頂部。你想要的是原來的常數值減去50. – rdelmar

+0

@rdelmar相當正確。我推測他正在把它從屏幕上移開,但顯然他應該把這個常數改變成它應該是的。我已經調整了代碼。 – Rob

+0

你知道爲什麼,如果你用一個按鈕來做這件事,標題會從按鈕外面動畫到適當的地方嗎?我之前在一些動畫實驗中已經注意到了這一點,對我來說它沒有任何意義 - 我認爲標題的任何約束都是按鈕本身的內部因素,不應該改變。 – rdelmar

-1

有ü嘗試

logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height)