如何在成长过程中移动图像?

时间:2013-10-23 22:49:16

标签: xcode5

此代码中的图像从中心开始增长,直到达到最终大小然后停止。我需要的是在图像增长的同时使图像移动到底部中心。 谢谢。

- (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];


    }

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

刚刚找到答案,它对我有用。我在第一个代码之后添加了这个并获得了预期的效果。这是代码:

grow.center = CGPointMake(150,650);

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

我不得不关闭Autolayout以使其正常工作。

再次感谢Xono的回答并回复:)