亲爱的,
我想相对于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并没有旋转。我需要的是旋转imageview而不是图像。
非常感谢任何帮助。
谢谢&最好的祝福, Rupesh R Menon
答案 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;