2016-06-16 2 views
0

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

Пожалуйста, помогите мне на примере rotation.Thank вы

@interface ViewController() 

@property (strong, nonatomic) UIView *currentPicture; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.scaleSwitch.on = self.rotationControl.on = self.translationSwitch.on = NO; 
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetMidX(self.view.bounds)-50, 
                  150, 
                  100, 100)]; 

    myView.backgroundColor = [UIColor redColor]; 
    [self.view addSubview:myView]; 

    self.currentPicture = myView;  
} 

#pragma mark - Slider Actions 

- (IBAction)actionAnimationSpeedSlider:(id)sender { 
    self.animationSpeedLabelInfo.text = [NSString stringWithFormat:@"%.3f", self.animationSpeedSlider.value]; 
} 


#pragma mark - Switch Actions 

- (IBAction)actionSwitch:(UISwitch *)sender { 

    if (self.rotationControl.on) 
     [self rotatePicture]; 
    else 
     [sender.layer removeAllAnimations]; 
} 


-(void) rotatePicture { 
    CGAffineTransform currentPictureState = self.currentPicture.transform; 

    [UIView animateWithDuration:self.animationSpeedSlider.value 
         delay:0.3f 
        options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionRepeat 
       animations:^{ 
        self.currentPicture.transform = CGAffineTransformRotate(currentPictureState, M_PI); 
       } 
       completion:^(BOOL finished) { 
        NSLog(@"Rotation finished!Repeating."); 
       }]; 
} 

ответ

0

Я не знаю, насколько гладко было бы, но что, если вы делаете много небольших поворотов, то есть вы бы повернуть изображение только 1 или 2 градуса в одной анимации, а в блоке завершения снова отправить метод rotatePicture (и, конечно, отключить повторение). Таким образом, каждая анимация может начинаться с обновленного значения продолжительности.

+0

Спасибо, человек, я пробовал, и он не достаточно гладкий. И теперь у меня другая проблема, я не могу ее остановить. – da3m0n

+0

Просто добавьте BOOL, который вы проверяете каждый раз, когда вы перезапускаете анимацию. – Levi

+0

Yeaaaaahhh, что помогло, выглядит длиннее, но работает. спасибо – da3m0n

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