Поворот изображения с использованием объектива C - PullRequest
4 голосов
/ 25 октября 2010

Я пытаюсь повернуть изображение.Это мне удается.Проблема в том, что когда я нажимаю вниз и слегка перетаскиваю, изображение полностью поворачивается, чтобы достичь точки, где я щелкнул, а затем медленно вращается, когда я перетаскиваю изображение по часовой стрелке.Я обеспокоен тем, почему он вращается полностью к месту, которое я тащу.Я хочу, чтобы перетаскивание начиналось с позиции, в которой оно было найдено, а НЕ вращалось там, где находится мой палец, а затем начиналось оттуда.

Это мой код:

-

    (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {   
    }

    -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        NSSet *allTouches = [event allTouches];

        int len = [allTouches count]-1;

        UITouch *touch =[[allTouches allObjects] objectAtIndex:len];
        CGPoint location = [touch locationInView:[self superview]];
        float theAngle = atan2( location.y-self.center.y, location.x-self.center.x );

        totalRadians = theAngle;

        [self rotateImage:theAngle];

    }

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
}

-(void) rotateImage:(float)angleRadians{

    self.transform = CGAffineTransformMakeRotation(angleRadians);
    CATransform3D rotatedTransform = self.layer.transform;
    self.layer.transform = rotatedTransform;    
}

Я что-то не так делаю?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

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

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        NSSet *allTouches = [event allTouches];

        int len = [allTouches count]-1;

        UITouch *touch =[[allTouches allObjects] objectAtIndex:len];
        CGPoint location = [touch locationInView:[self superview]];
        float theAngle = atan2( location.y-self.center.y, location.x-self.center.x );

        totalRadians += fabs(theAngle - totalRadians);
        totalRadians = fmod(totalRadians, 2*M_PI);

        [self rotateImage:totalRadians];

    }
1 голос
/ 25 октября 2010

Мой первый совет - перейти на использование UIRotateGestureRecognizer, если ваше приложение для версии 4.0 и выше. Это делает правильно и предоставляет вам rotation свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...