iOS仿射旋转只工作一次

时间:2013-01-14 17:38:49

标签: ios objective-c core-animation

我有一个按钮,我想用它来打开/关闭一个视图......

这是一个箭头,打开时,箭头将旋转180°。

关闭时,应向后旋转180°。

然而,它只在打开时旋转一次,但在关闭时不再旋转。如果我第二次打开它,它将不再旋转,即使它第一次打开它。

以下是代码:

    - (id)initWithFrame:(CGRect)frame
    {
        mediaOpened = NO;
        media   = [UIButton buttonWithType:UIButtonTypeCustom];
        [media retain];
        [media setBackgroundImage:[ImageController getImageNamed:@"arrow.png"] forState:UIControlStateNormal];
        [media addTarget:self action:@selector(toggleMedia) forControlEvents:UIControlEventTouchUpInside];
        media.frame = CGRectMake(2, 10, 26, 17);
        [self addSubview:media];
    }

    -(void) rotateMedia {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:0.3];

        float   angle = M_PI;
        media.transform = CGAffineTransformMakeRotation(angle);

        [UIView commitAnimations];
    }

    -(void) mediaClicked {
        if (self.delegate != nil) 
            [self.delegate mediaClicked];

        [self rotateMedia];
    }

    -(void) mediaUnclicked {    
        if (self.delegate != nil)
            [self.delegate mediaUnClicked];

        [self rotateMedia];
    }

    -(void) toggleMedia {
        if (!mediaOpened)
            [self mediaClicked];
        else
            [self mediaUnclicked];
        mediaOpened = !mediaOpened;
    }

1 个答案:

答案 0 :(得分:2)

添加以下行:

media.transform = CGAffineTransformIdentity; // Add this line to reset from current angle
media.transform = CGAffineTransformMakeRotation(angle);

在应用旋转之前。 这将使当前位置旋转,否则您始终从相同位置开始。你正在做的是旋转到那个角度,在它转到那个角度后,连续的动画试图动画到它已经在的位置,没有动画。