Как повернуть UIImageView на основе точки в методе Touches Moved? - PullRequest
0 голосов
/ 11 мая 2011

Дорогие все,

Я хочу повернуть UIImageView относительно точки в методе touchesMoved.

Я пробовал 2 -3 метода, но не получил точного результата, который ожидал.

Первый метод, который я использовал

CGAffineTransform transforms = CGAffineTransformMakeRotation(M_PI/2);

imgView.transform = transforms;

Это написано в штрихах. Так что я ожидаю поворота для просмотра изображения при каждом касании. Но вращение происходит только один раз.

Второй метод, который я использовал, был

CGAffineTransform transforms = CGAffineTransformRotate(imgView.transform, M_PI/2);

imgView.transform = transforms;

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

Любая помощь будет принята с благодарностью.

Спасибо и наилучшими пожеланиями, Рупеш Р Менон

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Если я правильно понял, вы хотите добиться вращения пальца на изображении.Если это так, вы можете использовать следующие функции из одного из моих живых рабочих проектов.Вы можете использовать это для одного изображения, а также нескольких изображений.Вы должны изменить в некоторой степени для нескольких изображений.Лучший способ - расширить класс UIImageView и создать свой собственный класс.

При перемещении касаний вызовите эту функцию

  • [self transformImagewithTouches: touch];

Объявите 1 свойство и синтезируйте следующим образом,(Также, пожалуйста, объявите другие переменные, если требуется, в приведенном ниже коде.

  • @ свойство (неатомное) CGFloat fltRotatedAngle;
-(void)transformImagewithTouches:(UITouch *)touchLocation
{
    //NSLog(@"Before %f",self.fltRotatedAngle);
    CGPoint touchLocationpoint = [touchLocation locationInView:[self superview]]; 
    CGPoint PrevioustouchLocationpoint = [touchLocation previousLocationInView:[self superview]];
    CGPoint origin;
    origin.x=self.center.x;
    origin.y=self.center.y;
    CGPoint previousDifference = [self vectorFromPoint:origin toPoint:PrevioustouchLocationpoint];
    CGAffineTransform newTransform =CGAffineTransformScale(self.transform, 1, 1); 
    CGFloat previousRotation = atan2(previousDifference.y, previousDifference.x); 
    CGPoint currentDifference = [self vectorFromPoint:origin toPoint:touchLocationpoint]; 
    CGFloat currentRotation = atan2(currentDifference.y, currentDifference.x);
    CGFloat newAngle = currentRotation- previousRotation; 

    //Calculate Angle to Store
    fltTmpAngle = fltTmpAngle+newAngle;
    self.fltRotatedAngle = (fltTmpAngle*180)/M_PI;  

    newTransform = CGAffineTransformRotate(newTransform, newAngle);
    [self animateImageView:self toPosition:newTransform];   
}

-(void)animateImageView:(UIImageView *)theView toPosition:(CGAffineTransform) newTransform
{
    [UIView setAnimationsEnabled:YES];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.0750];   
    self.transform = newTransform;
    [UIView commitAnimations];
}

-(CGPoint)vectorFromPoint:(CGPoint)firstPoint toPoint:(CGPoint)secondPoint
{
    CGFloat x = secondPoint.x - firstPoint.x;
    CGFloat y = secondPoint.y - firstPoint.y; 
    CGPoint result = CGPointMake(x, y); 
    return result;
}

Надеюсь, это поможетЕсли вы застряли, пожалуйста, дайте мне знать, я обязательно вам помогу.

1 голос
/ 12 мая 2011

Спасибо за проявленный вами интерес к оказанию помощи.

Когда я использовал следующий код, я смог повернуть изображение в желаемый угол.

imgView.layer.transform= CATransform3DMakeRotation (pCalculator.tangentToCornerAngle, 0, 0, 1);

, где imgView - это UIImageView.

  pCalculator.tangentToCornerAngle  is the desired angle in which rotation has to be made.

Function is CATransform3DMakeRotation(CGFloat angle, CGFloat x, <CGFloat y, CGFloat z);

Спасибо всем, Рупеш, Менон

0 голосов
/ 11 мая 2011

Это потому, что вы повернули его с помощью M_PI / 2, и когда вы поворачиваете его снова, он поворачивает его из начальной позиции.Используйте это

CGAffineTransform transforms = CGAffineTransformConcat(imgView.transform,CGAffineTransformMakeRotation(M_PI/2));
imgView.transform = transforms;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...