此代码中的图像从中心开始增长,直到达到最终大小然后停止。我需要的是在图像增长的同时使图像移动到底部中心。 谢谢。
- (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 :(得分: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的回答并回复:)