【问题标题】:Translate UIView by dragging another UIView通过拖动另一个 UIView 来翻译 UIView
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 马特,谢谢!你犯了几个小错误,但我编辑了你的答案以防其他人需要它。你帮了大忙。非常感谢!
【解决方案2】:

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

orangeView.transform = CGAffineTransformMakeTranslation(delta.x,delta.y); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2015-04-19
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多