1

У меня есть кнопка (openMenu), которую я анимация вниз (отлично работает) и вращается (работает в первый раз) с помощью «выдвижного ящика». В первый раз, когда он вращается, он работает. Но когда я пытаюсь снова повернуть его, парики выходят и скрывают изображение и показывают название кнопки? Любые идеи о том, почему? Мне нужно, чтобы он просто вращал назад еще 45 градусов. Не знаю, почему он это сделает.анимация вращения UIButton не вращается назад с CGAffineTransformMakeRotation

Также - см. Изображение 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)); 
         }]; 
    } 

} 

+0

Если я изменяю openMenu.transform = CGAffineTransformMakeRotation (M_PI/2); для первого и openMenu.transform = CGAffineTransformMakeRotation (-M_PI/2); оно работает! НО! То есть вращение на 180 градусов. Когда я делаю -M_PI/4, он имеет ту же проблему, что и выше. Я не знаю, почему это просто не работает с поворотами на 45 градусов ?! –

+0

Вам не нужно поворачивать его на 0 градусов? – morksinaanab

ответ

0

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

Вот отрывок из компании Apple Docs:

CGAffineTransformMakeRotation()

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

CGAffineTransform CGAffineTransformMakeRotation (угол CGFloat);

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

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

+0

Я попытался сделать это в приведенном выше коде. Я уже перехожу к радианам. –

+0

Если я делаю openMenu.transform = CGAffineTransformMakeRotation (M_PI/2); вращать и открыватьMenu.transform = CGAffineTransformMakeRotation (-M_PI/2); для «реверсирования» это работает. Но это 180 градусов ... мне нужно 45 градусов. Если я делаю M_PI/4, он вообще не работает? –

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 
}]; 


} 


надеюсь, что это помогает u :)

 Смежные вопросы

  • Нет связанных вопросов^_^