1
我正在使用以下代码通过在左右箭头上开始手势来旋转图像。沿着旋转移动箭头。旋转图像突然翻转
- (void)handleRotation:(UIPanGestureRecognizer *)recognizer
{
UIView* cview = self.superview.superview;
UIView* lView = self.superview;
CGPoint origin = [lView convertPoint: self.center toView: cview];
if (recognizer.state == UIGestureRecognizerStateBegan)
{
if (recognizer.view == leftImage)
{
initialP= [self convertPoint: leftImage.center toView: cview];
}
else
{
initialP = [self convertPoint: rightImage.center toView: cview];
}
}
CGPoint currentP = [recognizer translationInView:cview];
currentP.x += initialP.x;
currentP.y += initialP.y;
CGFloat angle = 0;
CGFloat a = initialP.x - origin.x;
CGFloat b = initialP.y - origin.y;
CGFloat c = currentP.x - origin.x;
CGFloat d = currentP.y - origin.y;
angle = acosf(((a*c) + (b*d))/((sqrt(a*a + b*b)) * (sqrt(c*c + d*d))));
angle += lastReleasedAngle;
if (currentP.y < (currentP.x *(initialP.y - origin.y) + (initialP.x * origin.y - initialP.y * origin.x))/(initialP.x - origin.x))
{
angle = -angle;
}
if (recognizer.view == leftImage)
{
angle = -angle;
}
if(recognizer.state == UIGestureRecognizerStateBegan ||
recognizer.state == UIGestureRecognizerStateChanged || recognizer.state == UIGestureRecognizerStateEnded)
{
[self setTransform: CGAffineTransformMakeRotation(angle)];
}
if (recognizer.state == UIGestureRecognizerStateEnded)
{
lastReleasedAngle = angle;
}
时开始转动它完美fine.Say第一次,右箭头是0度now..when我从这里开始旋转,并释放在这里工作fine.When我释放旋转其他地方则尝试旋转180度后,图像开始精确翻转180度。
难道你忘记了一个“=”,在'角度+ = lastReleasedAngle =角度;;'? – Saphrosit 2012-04-05 11:12:54
是啊,我编辑时的错误。 – user1226038 2012-04-05 11:15:49