2010-10-19 32 views
1

我試圖運行一個動畫,以便scrollview的contentoffset不斷滾動下來。UIView Animaton重置爲開始

但是,在每次重複之後,它將從原始位置開始動畫並且不會進行。

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationBeginsFromCurrentState: YES]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationRepeatCount: 100]; 

CGPoint contentOffset = scrollView.contentOffset; 
contentOffset.y += 50; 
scrollView.contentOffset = contentOffset; 

scrollView.transform = CGAffineTransformIdentity; 
[UIView commitAnimations]; 

有什麼想法嗎?

回答

1

你爲什麼試圖手動滾動視圖?你不能用方法

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 

無論如何,我相信你的動畫不能如你所期望的那樣工作的原因是因爲你設置了重複次數而不是每次都重新渲染動畫。如果要解決此問題,可以通過創建一個包裝動畫並通過上下文指針傳遞參數的方法,再次在動畫回調中進行動畫製作。

- (void) animateContentOffsetByAmount:(CGFloat)amount numberRemaining:(int)num { 
    if (num == 0) return; 

    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector: 
     @selector(scrollAnimationStoppedWithID:finished:context:)]; 

    //NSArray released in callback 
    NSArray* contextArray = [NSArray arrayWithObjects: 
     [NSNumber numberWithFloat:amount], 
     [NSNumber numberwithInt:num], nil] 
    [UIView beginAnimations:nil context:contextArray]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

    CGPoint contentOffset = scrollView.contentOffset; 
    contentOffset.y += amount; 
    scrollView.contentOffset = contentOffset; 

    scrollView.transform = CGAffineTransformIdentity; 
    [UIView commitAnimations]; 
} 

- (void) scrollAnimationStoppedWithID:(NSString*)id 
     finished:(NSNumber*)finished context:(void*)context { 
    NSArray* contextArray = (NSArray*)context; 
    CGFloat amount = [(NSNumber*)[contextArray objectAtIndex:0] floatValue]; 
    int count = [(NSNumber*)[contextArray objectAtIndex:1] intValue]; 
    count = count - 1; 
    [contextArray release]; 
    [self animateContentOffsetByAmount:amount numberRemaining:count] 
} 

然後在你的代碼,只需調用

[self animateContentOffsetByAmount:50 numberRemaining:100]; 
+0

原因,我想這樣做,這種方式是模擬控制有點像老虎機..很像UIPickerView ..但因爲我們無法在視圖方面做太多的自定義,我這樣做的滾動視圖滾動數字。在最新版本的SDK中。根據視圖不允許對UIPickerView進行更改。 – 2010-10-20 01:16:57

+0

雖然很棒,但我明白了。謝謝! – 2010-10-20 01:21:24

相關問題