如何基于触摸移动方法中的点旋转UIImageView?

时间:2011-05-11 10:22:07

标签: iphone objective-c ipad

亲爱的,

我想相对于touchesMoved方法中的一个点旋转UIImageView。

我尝试了2到3种方法,但是我没有得到我预期的确切结果。

我使用的第一种方法

CGAffineTransform transforms = CGAffineTransformMakeRotation(M_PI/2);

imgView.transform = transforms;

这是用touchesMoved编写的。所以我期望每次touchesMoved中的图像视图旋转。 但轮换只发生一次。

我使用的第二种方法是

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

imgView.transform = transforms;

现在我得到的结果是图像视图中的图像在每次移动中连续旋转。但是imageview并没有旋转。我需要的是旋转im​​ageview而不是图像。

非常感谢任何帮助。

谢谢&最好的祝福, Rupesh R Menon

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望在图像上实现单指旋转。如果是这样,您可以使用我的一个实际工作项目中的以下功能。您可以将此用于单个图像以及多个图像。您需要在某种程度上修改多个图像。最好的方法是扩展UIImageView类并创建自己的类。

从触摸移动中调用此函数

  
      
  • [self transformImagewithTouches:touch];
  •   

声明1属性并合成如下。 (如果需要,请在下面的代码中声明其他变量。

  
      
  • @property(nonatomic)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 :(得分:1)

感谢您对我的兴趣。

当我使用下面的代码时,我能够以所需的角度旋转图像视图。

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);

谢谢你们所有, Rupesh R Menon

答案 2 :(得分:0)

这是因为你已经将它旋转了M_PI / 2,当你再次旋转它时,它会从初始位置旋转它。使用这一个

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