Анимация вращения UIButton не поворачивается назад с помощью CGAffineTransformMakeRotation

У меня есть кнопка (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));
                         }];
    }

}


person Sean Herman    schedule 04.09.2013    source источник
comment
Если я изменю openMenu.transform = CGAffineTransformMakeRotation(M_PI/2); для первого и openMenu.transform = CGAffineTransformMakeRotation(-M_PI / 2); оно работает! НО! То есть вращение на 180 градусов. Когда я делаю -M_PI/4, возникает та же проблема, что и выше. Я не знаю, почему это просто не работает с поворотом на 45 градусов?!   -  person Sean Herman    schedule 04.09.2013
comment
Разве вы не должны повернуть его обратно на 0 градусов?   -  person morksinaanab    schedule 04.02.2014


Ответы (2)


Делайте так, я использую слои для анимации, это легко, как только вы повернете, не нужно вращать снова, просто возвращаете в исходное состояние. Мне понравилось это, это работает для меня, просто попробуйте это. так как я использую слои, добавьте библиотеку «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
}];


}


надеюсь, это поможет вам :)

person Shankar BS    schedule 05.09.2013

Если вы хотите повернуть кнопку назад, вам нужно указать отрицательное число в качестве значения для CGAffineTransformMakeRotation().

Вот фрагмент из Apple Docs:

CGAffineTransformMakeRotation()

Возвращает матрицу аффинного преобразования, построенную на основе предоставленного вами значения поворота.

CGAffineTransform CGAffineTransformMakeRotation (угол CGFloat);

Угол в радианах, на который эта матрица поворачивает оси системы координат. В iOS положительное значение указывает вращение против часовой стрелки, а отрицательное значение указывает вращение по часовой стрелке. В OS X положительное значение указывает вращение по часовой стрелке, а отрицательное значение указывает вращение против часовой стрелки.

Надеюсь это поможет!

person Arthur Shinkevich    schedule 04.09.2013
comment
Я пытался сделать это в приведенном выше коде. Я уже конвертирую в радианы. - person Sean Herman; 04.09.2013
comment
Если я делаю openMenu.transform = CGAffineTransformMakeRotation(M_PI/2); повернуть и открытьMenu.transform = CGAffineTransformMakeRotation(-M_PI/2); чтобы изменить это, это работает. Но это 180 градусов... мне нужно 45 градусов. Если я делаю M_PI / 4, он вообще не работает? - person Sean Herman; 04.09.2013