UIButton旋转动画不能与CGAffineTransformMakeRotation一起旋转

时间:2013-09-04 17:05:26

标签: objective-c animation objective-c-blocks cgaffinetransform

我有一个按钮(openMenu),我正在向下设置动画(正常工作)并使用“抽屉”旋转(第一次工作)。它第一次旋转它的工作..但是当我再次尝试旋转时,它会退出并隐藏图像并显示按钮标题?任何想法为什么?我需要它再向后旋转45度。不知道为什么会这样做。

另外 - 请参阅下面的GIF图片,以便了解正在发生的事情。

- (void)viewDidLoad
{

    [super viewDidLoad];

    draw1 = 0;
    scrollView.frame = CGRectMake(0, -200, 768, 200);
    [scrollView setContentSize:CGSizeMake(768, 200)];
    openMenu.frame = CGRectMake(680, 100, 55, 55);

}




- (IBAction)openMenu:(id)sender {

    if (draw1 == 0) {

        draw1 = 1;

        CGRect optionsDrawer = scrollView.frame;
        CGRect optionsButton = openMenu.frame;
        optionsDrawer.origin.y += 200;
        optionsButton.origin.y += 200;
        [UIView animateWithDuration:0.5
                         animations:^{
                             scrollView.frame = optionsDrawer;
                             openMenu.frame = optionsButton;
                             openMenu.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(45));
                         }];
    } else {

        draw1 = 0;

        CGRect optionsDrawer = scrollView.frame;
        CGRect optionsButton = openMenu.frame;
        optionsDrawer.origin.y -= 200;
        optionsButton.origin.y -= 200;
        [UIView animateWithDuration:0.5
                         animations:^{
                             scrollView.frame = optionsDrawer;
                             openMenu.frame = optionsButton;
                             openMenu.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(45));
                         }];
    }

}

2 个答案:

答案 0 :(得分:3)

这样做,我使用图层来制作动画,很容易,一旦你旋转,不需要再次旋转,只需恢复到原始状态。我这样做对我有用,试试吧。 因为我正在使用图层添加“QuartzCore”库并导入此


 #import<QuartzCore/QuartzCore.h> //include this

 if (draw1 == 0) 
 { 
    ....//your code
    [UIView animateWithDuration:0.1 animations:^{
     detailButton.layer.transform = CATransform3DMakeRotation((180) * 45, 0, 0, 1);
 }];

 } 
 else
 {

 ....//your code

   [UIView animateWithDuration:0.1 animations:^{
    detailButton.transform = CGAffineTransformIdentity; //brings back to original position by animating
}];


}


希望这有助于你:)

答案 1 :(得分:0)

如果要将按钮旋转回来 - 您需要提供负数作为CGAffineTransformMakeRotation()的值。

以下是Apple Docs的摘录:

  

CGAffineTransformMakeRotation()

     

返回由旋转构造的仿射变换矩阵   你提供的价值。

     

CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle);

     

此矩阵旋转的角度(以弧度表示)   坐标系轴。在iOS中,正值指定   逆时针旋转,负值指定顺时针   回转。在OS X中,正值指定顺时针旋转和a   负值指定逆时针旋转。

希望这有帮助!