我有一个按钮,我想用它来打开/关闭一个视图......
这是一个箭头,打开时,箭头将旋转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;
}
答案 0 :(得分:2)
添加以下行:
media.transform = CGAffineTransformIdentity; // Add this line to reset from current angle
media.transform = CGAffineTransformMakeRotation(angle);
在应用旋转之前。 这将使当前位置旋转,否则您始终从相同位置开始。你正在做的是旋转到那个角度,在它转到那个角度后,连续的动画试图动画到它已经在的位置,没有动画。