UIRotationGestureRecognizer - 围绕锚点旋转

5

以下是我的手势识别器的当前实现:

- (IBAction)handleRotate:(UIRotationGestureRecognizer *)recognizer {

if([recognizer state] == UIGestureRecognizerStateEnded) {

    _lastRotation = 0.0;
    return;
}

CGFloat rotation = 0.0 - (_lastRotation - [recognizer rotation]);

CGAffineTransform currentTransform = self.container.transform;
CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);

[self.container setTransform:newTransform];

_lastRotation = [recognizer rotation];

}

运行良好。问题在于self.container始终围绕其中心旋转。我希望它围绕两个触摸点的中点旋转,这样如果你放大了,就可以围绕你触摸的区域旋转。我该怎么做?

2个回答

0

我不确定您是否可以将点设置到旋转对象的边界之外,但是容器层属性将允许您从变换中指定锚点。

它接受值从0.0-1.0,从左上角到右下角。

#import <QuartzCore/QuartzCore.h>

[[container layer] setAnchorPoint:myCGPoint];

0

您可以使用以下代码将中心点放置到任何CGPoint类型变量中:

recognizer.view.center = CGPoint(x,y);

如需更多解释,请参考this示例

(在pangesturerecognizer处理方法中,它显示了如何为视图设置中心点)

编程愉快 :)

编辑1

好的,我已经得到了如何在视图(任何视图)中获取触摸位置的代码,首先需要启用视图的多点触控属性。(请参见下面的图片)

multipal touch enabled in XIB

然后按照以下方式实现委托方法

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Began %@",touches);
    NSUInteger touchCount = 0;
    for(UITouch *tu in touches)
    {
        CGPoint pt = [tu locationInView:self.view];
        NSLog(@"pt %f, %f",pt.x,pt.y);
        touchCount ++;
    }
    NSLog(@"touchCount %d",touchCount);
}

这个方法在NSLog中显示触摸。我使用self.view仅供演示,您可以使用任何视图。

根据您的要求修改此方法,并使用以下计算方式使用两个点的坐标获得中心点

p3.x =(p1.x + p2.x)/ 2; p3.y =(p1.y + p2.y)/ 2;

这里p1,p2是您在上述委托方法中获取到的两个触摸点,p3是您所需的中心点。

编码愉快 :)


我尝试了你的代码,但是出现了这个错误:'UIRotationGesture'没有声明选择器'translationInView'。我需要知道如何找到UIRotationGesture的中心。 - soleil
你需要获取当前触摸点的位置,以两个CGPoint的形式表示。对于旋转操作,至少需要两个触摸点。使用这些点找到中心点,并将该点分配为视图的中心点,使用上述代码即可 :) - The iOSDev
我已经为此苦苦挣扎了很多小时。鉴于我上面的代码,您能否可能展示一下如何使用您描述的方法找到两点触摸的中心点并围绕该点旋转? - soleil
好的,请稍等一下,等我在这里发布答案 :) - The iOSDev
请参考我的答案中的编辑1部分,以找到两个触摸点之间的中心点 :) 使用参考资料以获得更多理解,并对触摸事件进行更多操作 :) - The iOSDev
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接