2013-10-23 44 views
0

此代碼中的圖像從中心生長直到達到其最終大小,然後停止。我需要的是讓圖像在不斷增長的同時進入底層中心。 謝謝。如何讓圖像在增長的同時移動?

- (IBAction)expand:(id)sender { 


    grow.transform = CGAffineTransformMakeScale(1,1); 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:5.7]; 
    grow.transform = CGAffineTransformMakeScale(5, 5); 

     [UIView setAnimationRepeatAutoreverses:YES]; 
    self.view.transform = CGAffineTransformIdentity; 

     [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

     grow.alpha = 1.0; 


     [UIView commitAnimations]; 


    } 

回答

0

剛剛找到答案,它適用於我。我在第一個代碼後添加了這個,並得到了預期的效果。這裏是代碼:

grow.center = CGPointMake(150,650);

[UIView animateWithDuration:5.0 
       animations:^{grow.center= CGPointMake(160, 244);}]; 

我不得不關閉Autolayout才能正常工作。

謝謝你再次爲你的答案和回覆:)

0

有幾種方法可以解決這個問題。您使用的動畫代碼技術已在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]; 
+0

首先,非常感謝你費了很大的功夫來回答我的問題。我甚至沒有期待如此快速的答覆,所以也非常感謝你。那麼,我嘗試了第一行代碼,但得到了兩個錯誤:1-函數調用的參數太多,預計爲2,有3個。 2-函數調用的參數太少,期望3,有2個。其他代碼有一些奇怪的動畫像成長然後收縮並遠離視圖等等。 – user2828182

+0

只需快速確保它是最近的代碼 - 我編輯了幾次,我編輯的錯誤之一是傳遞參數到錯誤的方法('CGAffineTransformMakeScale'應該有2個參數,'CGAffineTransformTranslate'應該有3個參數)。第二塊代碼應該和第一塊一樣工作,包括自動反向(所以是的,增長,然後縮小)。你是否也想要運動自動反向? – Xono

+0

現在第一個工作,但圖像不斷向底部移動,直到它完全消失。我真正想要的是當圖像的上半部分仍然可見並且另一半消失並且達到其最大尺寸時圖像停止。 – user2828182

相關問題