0

以下问题请参考下图: 你看到的蓝色和橙色圆圈是 UIView 的。我希望能够拖动具有 UIPanGestureRecognizer 的蓝色 UIView 并让橙色圆圈相应地平移,并与现在的蓝色圆圈保持相同的距离。意思是,如果我向下拖动蓝色圆圈,橙色 UIView 应该与蓝色圆圈保持平行并向下平移。如果我将蓝色圆圈向右拖动,橙色圆圈也应该向右平移,并与现在的蓝色圆圈保持相同的距离。

图片

所以现在这些圆圈是同一个类的一部分,它们上面有一个 UIPanGestureRecognizer。这是拖动这些视图的代码:

-(void)dragging:(UIPanGestureRecognizer *)p {


UIView *newView = p.view;
if (p.state == UIGestureRecognizerStateBegan) {
    self.origC = newView.center;
}
self.delta = [p translationInView:newView.superview];
CGPoint c = self.origC;

c.x +=self.delta.x;
c.y +=self.delta.y;

newView.center = c;

[self.delegate refreshView];
}

在 UIPanGestureRecognizer 类中,我能够获得平移手势在指定视图坐标系中的平移:

self.delta = [p translationInView:newView.superview];

我认为这是我需要申请翻译橙色圆圈的增量,但我不确定我将如何去做?任何帮助,将不胜感激。谢谢!

4

2 回答 2

0

据我了解,粘贴的代码可以工作,但是您想找到“单行代码”的方式,对吗?我猜你在寻找这样的东西。

orangeView.transform = CGAffineTransformMakeTranslation(delta.x,delta.y); 
于 2013-05-09T01:47:35.177 回答
0

完全按照您对直接拖动点的操作进行操作。

if (p.state == UIGestureRecognizerStateBegan) {
    self.origC = newView.center; // your code
    self.origD = otherView.center; // new code
}
CGPoint c = self.origC; // your code
c.x +=self.delta.x; // your code
c.y +=self.delta.y; // your code
newView.center = c; // your code
CGPoint d = self.origD; // new code
d.x +=self.delta.x; // new code
d.y +=self.delta.y; // new code
otherView.center = d; // new code
于 2013-05-09T01:45:47.017 回答