我正在使用UIView子类在AVPlayer中播放视频。它工作正常,没有问题。但是,我希望这种观点可以拖延。在其类中,我有touchesMoved
委托方法执行以下操作:
CGPoint tap = [[touches anyObject] locationInView:self];
self.center = tap;
然而,这非常令人难以置信。 uiview,谁的界限是{{0, 0}, {342, 256}}
从我的手指移动到我的屏幕的左上方真的很快,当我放手,它消失了。我怎样才能将UIView中的点移动到我的手指当前的位置,为什么它移动到左上角?我做错了吗?
答案 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;