调整图像大小但从未恢复原始大小

时间:2014-06-07 15:31:22

标签: ios xcode uiview

我试图调整图像大小(微小并恢复到原始大小)。此代码用于调整图像大小,但永远不会恢复到原始大小。我瘦了我在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];

2 个答案:

答案 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];