2013-06-11 42 views
4

我需要在UIScrollView上將zoomScale重新設置爲1,但我需要動畫。我認爲我可以使用CABasicAnimation這個,但NSValue似乎沒有「valueForFloat」或「valueForNSNumber」,所以我不確定CABasicAnimation的animation.fromValue和animation.toValue使用什麼。有沒有更好的方法來解決這個問題?如何在UIScrollView上動畫zoomScale

編輯:我需要添加這個工作?

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"zoomScale"]; 
     animation.duration = 2.3; 
     animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];   
     animation.fromValue = [NSNumber numberWithFloat:myScrollview.zoomScale]; 
     animation.toValue = [NSNumber numberWithFloat:1.0]; 

     [myScrollview.layer addAnimation:animation forKey:@"zoomScale"]; 
+0

嘗試將動畫添加到動畫不在scrollView上的視圖上,因爲我認爲滾動圖層並未更改,但縮放視圖的圖層已更改。 – danypata

回答

11

你並不需要求助於CAAnimation這種簡單的事,只要使用-[UIScrollView setZoomScale:animated:]傳遞YES作爲第二個參數。

無論如何,如果您想修改動畫的某些方面,您可以使用「UIView動畫」來代替,因爲zoomScale不是直接屬於CAAnimation的動畫屬性。

你試過類似下面的東西嗎?

[UIView animateWithDuration:2.0 
         delay:0 
        options:UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ [myScrollView setZoomScale:1.0f animated:NO]; } 
       completion:nil]; 
+0

雖然我想設置自己的動畫時間。我不想要setZoomScale的默認動畫時間:動畫: – soleil

+0

您應該使用'NSNumber'實例作爲'fromValue'和'toValue'的值。 – yonosoytu

+0

請參閱我上面的修改。 – soleil