有幾種方法可以解決這個問題。您使用的動畫代碼技術已在iOS4中被替換,並且使用CGAffineTransform(根據我的口味)也不完全理想。
不過,如果你想用這種方法,你可以做類似這樣的(注:我沒有測試過這一點,這或多或少是個最好的猜測):什麼
- (IBAction)expand:(id)sender {
grow.transform = CGAffineTransformMakeScale(1,1);
CGFloat scale = 5.0;
CGFloat moveDistance = ([[UIScreen mainScreen] bounds].size.height - (grow.frame.origin.y*scale)) - grow.frame.origin.y;
CGAffineTransform transformation = CGAffineTransformMakeScale(scale, scale);
transformation = CGAffineTransformTranslate(transformation, 0, moveDistance);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5.7];
grow.transform = transformation;
[UIView setAnimationRepeatAutoreverses:YES];
self.view.transform = CGAffineTransformIdentity;
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
grow.alpha = 1.0;
[UIView commitAnimations];
}
我會建議雖然考慮使用基於塊的動畫方法 - 但它更簡單,更易讀。此外,使用CGAffineTransform進行放大可能偶爾會導致問題(例如,如果增加UILabel幀的大小,它只是重新定位文本,如果使用CGAffineTransform,則文本會放大,變爲像素化)。你可以做類似這樣的事情:
CGFloat scale = 5.0;
CGRect originalFrame = grow.frame;
CGRect targetFrame = CGRectMake(
originalFrame.origin.x-(originalFrame.size.width*(scale/2.0)),
[[UIScreen mainScreen] bounds].size.height - (originalFrame.size.height*scale),
originalFrame.size.width*scale,
originalFrame.size.height*scale);
[UIView animateWithDuration:5.7 delay:0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{
[UIView setAnimationRepeatCount:1]
grow.frame = targetFrame;
grow.alpha = 1.0;
} completion:nil];
首先,非常感謝你費了很大的功夫來回答我的問題。我甚至沒有期待如此快速的答覆,所以也非常感謝你。那麼,我嘗試了第一行代碼,但得到了兩個錯誤:1-函數調用的參數太多,預計爲2,有3個。 2-函數調用的參數太少,期望3,有2個。其他代碼有一些奇怪的動畫像成長然後收縮並遠離視圖等等。 – user2828182
只需快速確保它是最近的代碼 - 我編輯了幾次,我編輯的錯誤之一是傳遞參數到錯誤的方法('CGAffineTransformMakeScale'應該有2個參數,'CGAffineTransformTranslate'應該有3個參數)。第二塊代碼應該和第一塊一樣工作,包括自動反向(所以是的,增長,然後縮小)。你是否也想要運動自動反向? – Xono
現在第一個工作,但圖像不斷向底部移動,直到它完全消失。我真正想要的是當圖像的上半部分仍然可見並且另一半消失並且達到其最大尺寸時圖像停止。 – user2828182