UIB анимация вращения не возвращается назад с помощью 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));
                         }];
    }

}

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


}


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

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

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

CGAffineTransformMakeRotation ()

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

CGAffineTransform CGAffineTransformMakeRotation (CGFloat angle);

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

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

Другие вопросы по тегам