2014-08-27 1 views
1

Я пытаюсь постепенно поворачивать UIImageView с помощью таймера, этот код вращает его, но он не кажется, что он вращается вокруг центра изображения, а также добавляет CGAffineTransformMakeRotation к моему коду кажется, чтобы остановить все другие символы в «основной» методПоворот UIImageView Постепенно с использованием таймера

#define radians(degrees) (degrees * M_PI/180) 

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.016 target:self selector:@selector(main) userInfo:nil repeats:YES]; 
-(void)main{ 
rotate++; 
uiImageView.transform = CGAffineTransformMakeRotation(radians(rotate)); 
uiImageView.center = CGPointMake(uiImageView.center.x+1, uiImageView.center.y); 
} 

ответ

3

Попробуйте это:

Запуск анимации:

CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
    rotation.fromValue = [NSNumber numberWithFloat:0]; 
    rotation.toValue = [NSNumber numberWithFloat:(2*M_PI)]; 
    rotation.duration = 1.0;// Speed 
    rotation.repeatCount = HUGE_VALF;// Repeat forever. 
    [imgViewCube.layer addAnimation:rotation forKey:@"Spin"]; 

Остановить анимацию:

[imgViewCube.layer removeAnimationForKey:@"Spin"]; 
+0

Благодаря этим работали почти безупречно, но когда я остановить анимацию образ восходит к его первоначальное состояние, есть ли способ сохранить его во вращающемся состоянии? – NickPali

+0

, что делает метод 'addAnimation:', - это добавить эффект к объекту 'presentationLayer'. Из-за этого, когда мы удаляем анимацию, представление возвращается в исходное состояние. Предположим, вы хотите переместить объект из точки A в точку B и сохранить измененное состояние в конце анимации, тогда вы должны сначала изменить положение слоев на точку B, а затем сделать анимацию, показывающую движение от точки A до точки B. - продолжение – croyneaus4u

+0

- продолжение -> Но в вашем случае я не думаю, что это можно сделать. Поэтому, останавливая анимацию, я предлагаю получить текущее значение из PresentationLayer ImageView и передать его на слой ImageView. в том же методе. Приветствия. – croyneaus4u

0

вы можете вращать медленно указав продолжительность анимации

NSTimeInterval duration = 1.5; 
[UIView animateWithDuration:duration animations:^ 
{ 
    // set the final transform/freame/center here 
    uiImageView.transform = CGAffineTransformMakeRotation(radians(rotate)); 
    uiImageView.center = CGPointMake(uiImageView.center.x+1, uiImageView.center.y); 

} completion:^(BOOL finished) 
{ 
    NSLog(@"animation completed"); 
}]; 
0

вы можете сделать что-то вроде этого

// this spin completes 360 degrees every 2 seconds 
    [UIView animateWithDuration:1.0f 
          delay:0.0f 
         options: UIViewAnimationOptionRepeat 
        animations: ^(void){ 
         uiImageView.transform = CGAffineTransformRotate(uiImageView.transform, M_PI/2); 
        } 
        completion:NULL]; 
Смежные вопросы