以下是我当前对手势识别器的实现:
- (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总是围绕它的中心旋转。我希望它围绕两个触摸的中点旋转,这样如果你放大了,你可以围绕你正在触摸的区域旋转。我该怎么做?
答案 0 :(得分:0)
我不确定你是否可以将一个点设置在被旋转对象的边界之外,但是你的容器图层属性将允许你从变换中指定一个锚点。
它接受从左上角到右下角0.0-1.0的值。
#import <QuartzCore/QuartzCore.h>
[[container layer] setAnchorPoint:myCGPoint];
答案 1 :(得分:0)
您可以使用代码
将中心点放置到任何CGPoint
类型变量
recognizer.view.center = CGPoint(x,y);
有关详细说明,请参阅this示例
(在pangesturerecognizer handeling方法中,它显示了如何设置视图中心)
快乐编码:)
编辑1
好的,我得到了如何在视图(任意)中获取触摸位置的代码,因为第一个必需的是为视图启用多重触摸属性。 (见下图)
然后实现委托方法如下
- (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是你需要的中心点。
快乐编码:)