我试图调整图像大小(微小并恢复到原始大小)。此代码用于调整图像大小,但永远不会恢复到原始大小。我瘦了我在endItem1Animation代码中遗漏了一些东西。有什么建议?感谢
if (CGRectIntersectsRect(image.frame, item1.frame)) {
item1.hidden = YES;
// Item 1 Animation (Go Tiny)
[UIView beginAnimations:NULL context:NULL];
[UIView setAnimationsEnabled:YES];
[UIView setAnimationDelay:0];
[UIView setAnimationDuration:0];
[UIView setAnimationRepeatCount:0];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationRepeatAutoreverses:NO];
CGRect newRect = image.frame;
newRect.size = CGSizeMake(25,25);
image.frame = newRect;
[UIView commitAnimations];
[self endItem1Animation];
这是endItem1Animation代码: //第1项结束动画(返回原始尺寸)
[UIView beginAnimations:NULL context:NULL];
[UIView setAnimationsEnabled:YES];
[UIView setAnimationDelay:0];
[UIView setAnimationDuration:5.0];
[UIView setAnimationRepeatCount:0];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationRepeatAutoreverses:NO];
CGRect newRect = image.frame;
newRect.size = CGSizeMake(50,50);
image.frame = newRect;
[UIView commitAnimations];
答案 0 :(得分:1)
问题在于,当你调用beginAnimations / endAnimation时,这不会阻止主线程运行,所以调用[self endItem1Animation]设置第二个动画将阻止第一个动画运行。
您将要使用UIView动画块方法,这样您就可以在动画完成时提供完成处理程序。
[UIView animateWithDuration:0.5 animations:^{
CGRect newRect = image.frame;
newRect.size = CGSizeMake(25,25);
image.frame = newRect;
} completion:^(BOOL finished) {
[self endItem1Animation];
}];
另一个更直接的问题是,第一个动画的持续时间为零。
答案 1 :(得分:0)
我修复了在代码末尾运行选择器的问题。现在我的代码正在运行。这是我的最终代码,我希望能帮助别人。谢谢你的建议。
if(CGRectIntersectsRect(image.frame,item1.frame)){ item1.hidden = YES;
// Item 1 Animation (Go Tiny)
[UIView beginAnimations:NULL context:NULL];
[UIView setAnimationsEnabled:YES];
[UIView setAnimationDelay:0];
[UIView setAnimationDuration:0];
[UIView setAnimationRepeatCount:0];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationRepeatAutoreverses:NO];
CGRect newRect = image.frame;
newRect.size = CGSizeMake(25,25);
image.frame = newRect;
[UIView commitAnimations];
[self performSelector:@selector(endItem1Animation) withObject:nil afterDelay:8.0];