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 положительное значение указывает вращение по часовой стрелке, а отрицательное значение указывает вращение против часовой стрелки.
Надеюсь это поможет!