вращать UIView вокруг своего центра, но в несколько раз

голоса
16

Я пытаюсь повернуть некоторые UIViewвокруг своего центра, поэтому простой код идет что - то вроде (в псевдокоде):

[UIView beginAnimations:@crazyRotate context:nil];
[UIView setAnimationDuration:1.0];
someview.transform = CGAffineTransformMakeRotation(angle);
[UIView commitAnimations]

Теперь , если я установить угол сказать M_PI / 2 вещь вращается красиво. если установить его в 2 * M_PI, ну это не делает «ничего». Я понимаю , что матрица приводит к чему - то , что не делает ничего (вращающийся на 360 означает «пребывание» в некотором смысле), тем не менее, я хочу , чтобы повернуть его в 5 раз (думаю , что газеты поворот масштаба приходит на вас эффект - я не большой в описании, надеюсь , кто - то понимает). Итак, я попытался добавить угол установки до 180 градусов (M_PI) и добавить вложенное animatationBlock. но я думаю , что с тех пор я устанавливаю то же свойство ( someview.transition) снова игнорирует его как - то). Я попытался установить повтор количество анимации до 2 с углом M_PI , но это , кажется, просто повернуть 180, возвращаясь в прямом положении , а затем снова инициировать вращаться.

Итак, я немного из идей, любая помощь приветствуется! --t

Задан 06/02/2009 в 00:49
источник пользователем
На других языках...                            


4 ответов

голоса
36

Вы можете использовать следующую анимацию свойства слоя вашего UIView в. Я проверял.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Ответил 06/02/2009 в 01:26
источник пользователем

голоса
6

Как указано Brad Larson, вы можете сделать это с CAKeyframeAnimation. Например,

CAKeyframeAnimation *rotationAnimation;
rotationAnimation = 
   [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

rotationAnimation.values = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat:0.0 * M_PI], 
                            [NSNumber numberWithFloat:0.75 * M_PI], 
                            [NSNumber numberWithFloat:1.5 * M_PI], 
                            [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.timingFunction = 
   [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.duration = 10.0;

CALayer *layer = [viewToSpin layer];
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

Вы можете контролировать длительность общей анимации с rotationAnimation.durationсобственностью, а также ускорение и замедление (и вычисление шагов между ними) с rotationAnimation.timingFunctionимуществом.

Ответил 29/02/2012 в 00:37
источник пользователем

голоса
1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 8.0f;
animation.repeatCount = INFINITY;
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];
Ответил 22/06/2015 в 15:35
источник пользователем

голоса
1

Получение непрерывного прядения эффект немного сложнее, но я описывать средства , чтобы сделать это здесь . Да, Core Animation , кажется, оптимизация преобразования в ближайшее положение конечного внутри единичной окружности. Метод , который я описать там цепи несколько половинного вращение анимации вместе , чтобы сделать полную ротацию, хотя вы заметили небольшое заикание в эстафетной передаче обслуживания от одной анимации к следующему.

Возможно, CAKeyframeAnimation построены с этими значениями половинного вращения будут правильный способом пойти. Тогда вы могли бы также контролировать ускорение и замедление.

Ответил 06/02/2009 в 14:50
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more