【发布时间】:2013-05-09 01:35:56
【问题描述】:
以下问题请参考下图:您看到的蓝色和橙色圆圈是 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];
我认为这是我需要申请翻译橙色圆圈的增量,但我不确定我将如何去做?任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
你不能把
delta也添加到另一个视图的中心吗? -
所以这两个视图都作为子视图添加到另一个 UIView 中(由紫色背景表示)。在那个超级视图中,在
drawRect:内,我尝试将该增量添加到另一个视图的中心,如下所示:self.fp2.center = CGPointMake(self.fp2.center.x+self.deltaDrag.x, self.fp2.center.y+self.deltaDrag.y);这会导致橙色视图在第一次拖动蓝色视图时飞出窗口。 -
您将增量添加到橙色视图的原始中心还是当前中心?因为 delta 是一段时间内的总翻译量。
-
谢谢鲍勃,我得到了下面的答案。
-
@DanielRak 你应该接受一个答案或发布你自己的答案并接受它。
标签: iphone ios uiview cgaffinetransform uipangesturerecognizer