Как повернуть изображение от оригинала и обратно к нему?

Я попытался повернуть изображение, используя CGAffineTransformMakeRotation и CGAffineTransformRotate. Я хочу повернуть изображение от оригинала и снова по часовой стрелке к оригиналу (например, от 0 до 360). Мне нужно повернуть изображение как компакт-диск на плеере. Я сделал что-то вроде этого:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.1];  
CGAffineTransform transform = CGAffineTransformMakeRotation(1.0);
transform = CGAffineTransformRotate(transform, -180);
ImageView.transform = transform;

[UIView commitAnimations];

он просто вращается до 180 градусов, и если я изменю его на -300, он будет вращаться против часовой стрелки (это не то, что мне нужно).


person Matin    schedule 13.06.2013    source источник


Ответы (3)


угол поворота лучше определяется atan2() предположим, что A и B - это две точки на центральной линии, к которым ваше изображение должно быть повернуто, тогда угол поворота равен

0-atan2((b.x - a.x) ,(b.y -a.y))

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

person amar    schedule 13.06.2013

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

-(void)startAnimationWithRevolutions:(float)revPerSecond forTime:(float)time
{
    spinWheel.userInteractionEnabled = FALSE;
    float totalRevolutions = revPerSecond * time;
    [CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:time] forKey:kCATransactionAnimationDuration];

    CABasicAnimation* spinAnimation = [CABasicAnimation
                                       animationWithKeyPath:@"transform.rotation"];
    CGAffineTransform transform = spinWheel.transform;
    float fromAngle = atan2(transform.b, transform.a);
    float toAngle = fromAngle + (totalRevolutions*4*M_PI);
    spinAnimation.fromValue = [NSNumber numberWithFloat:fromAngle];
    spinAnimation.toValue = [NSNumber numberWithFloat:toAngle];
    spinAnimation.repeatCount = 0;
    spinAnimation.removedOnCompletion = NO;
    spinAnimation.delegate = self;
    spinAnimation.timingFunction = [CAMediaTimingFunction functionWithName:
                                    kCAMediaTimingFunctionEaseOut];
    [spinWheel.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
    [CATransaction commit];
}
person Gaurav Kabra    schedule 13.06.2013

Использовать этот:

[UIView animateWithDuration:0.1 animations:^{
    CGAffineTransform transform = CGAffineTransformMakeRotation(1.0);
    transform = CGAffineTransformRotate(transform, -180);
    ImageView.transform = transform;
} completion:^(BOOL finished) {
    CGAffineTransform transform = CGAffineTransformMakeRotation(0);
    transform = CGAffineTransformRotate(transform,0);
    ImageView.transform = transform;
}];
person Prateek Prem    schedule 13.06.2013