可拖动的UIView移动不正确

时间:2013-12-02 02:00:33

标签: ios objective-c cocoa-touch drawrect touchesmoved

我正在使用UIView子类在AVPlayer中播放视频。它工作正常,没有问题。但是,我希望这种观点可以拖延。在其类中,我有touchesMoved委托方法执行以下操作:

CGPoint tap = [[touches anyObject] locationInView:self];
self.center = tap;

然而,这非常令人难以置信。 uiview,谁的界限是{{0, 0}, {342, 256}}从我的手指移动到我的屏幕的左上方真的很快,当我放手,它消失了。我怎样才能将UIView中的点移动到我的手指当前的位置,为什么它移动到左上角?我做错了吗?

2 个答案:

答案 0 :(得分:3)

您的参考框架存在问题。当您要求locationInView:self时,您要求在子视图的坐标系中触摸。 (即视图的左上角是(0,0)。)但是,子视图的center属性位于superview的坐标系中(即superview的左上角是(0) ,0))。因此,如果点击子视图的左上角,您获得的locationInView:self将为(0,0)并将其设置为您的子视图中心,将其置于左上角中超级视图

您可能希望获得locationInView:self.superview,以便您获得的点位于superview的坐标系中。或者,更好的是,让超级视图进行触摸处理。 (通常认为修改自己的中心的形式很差;每个视图通常都设计为对其超级视图及其在其中的位置不可知。)

答案 1 :(得分:1)

你应该尝试做这样的事情:

记住touchesBegan中的起始位置:

UITouch *touch = [touches anyObject];
self.startTouchPoint = [touch locationInView:self];         

通过touchesMoved中的位置差异移动视图:

    CGPoint movedPoint = [touch locationInView:self];

    CGFloat deltaX = movedPoint.x - _startTouchPoint.x;
    CGFloat deltaY = movedPoint.y - _startTouchPoint.y;
    CGPoint center = self.center;
    center.x += x;
    center.y += y;
    self.center = center;