2016-02-09 48 views
0

我有一個表示按鈕的按鈕。 我想用1.0秒的延時向上進行動畫處理,然後在有人點擊它時延遲0.2秒。 我做了兩種不同的方法來做向上和向下的動畫。 但是當我實際運行代碼時,兩個動畫同時提交,顯示了相反的順序。我想首先動畫向上動畫,然後向下動畫。 這裏是代碼。如何將2個動畫應用於其他iOS之後的一個子視圖上

-(void)starButtonUpAnimation{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:2.0]; 

    CGRect frame = self.starButton.frame; 
    frame.origin.y = frame.origin.y - frame.size.height; 
    self.starButton.frame = frame; 

    [UIView commitAnimations]; 

} 

-(void)starButtonDownAnimation{ 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.1]; 

    CGRect frame1 = self.starButton.frame; 
    frame1.origin.y = frame1.origin.y + frame1.size.height; 
    self.starButton.frame = frame1; 
    [UIView commitAnimations]; 

} 

按鈕操作方法,其中我調用上述方法。

- (IBAction)clickedStarButton:(id)sender { 
    [self starButtonUpAnimation]; 
    [self changeStarButtonImage]; 

    [self starButtonDownAnimation]; 
} 
+0

首先用現代基於塊的'UIView'動畫方法替換舊的棄用代碼。這會讓事情變得更簡單。 – rmaddy

+0

但我想在基於塊的動畫中,動畫的每一次迭代都需要相同的持續時間。不是嗎? –

+0

不,您指定每個塊的持續時間。 – rmaddy

回答

3

有些事情是這樣的嗎?

-(void)starButtonUpAnimation{ 

    CGRect frame = self.starButton.frame; 
    frame.origin.y = frame.origin.y - frame.size.height; 
    self.starButton.frame = frame; 
} 


-(void)starButtonDownAnimation{ 


    CGRect frame1 = self.starButton.frame; 
    frame1.origin.y = frame1.origin.y + frame1.size.height; 
    self.starButton.frame = frame1; 

    } 

- (IBAction)clickedStarButton:(id)sender { 

    [UIView animateWithDuration:2.0 animations:^{ 
     [self starButtonUpAnimation]; 
    } completion:^(BOOL finished) { 
    [self changeStarButtonImage]; 
    [UIView animateWithDuration:0.1 animations:^{ 
     [self starButtonDownAnimation]; 
    } completion:^(BOOL finished) { 
     // clean up 
    }]; 
    }]; 
} 
+0

只需在'clickedStarButton:'方法中放入整個'UIView animateWithDuration ...'塊代碼。 – rmaddy

+0

謝謝你,先生。現在它按照我想要的方式工作。 –

相關問題