touchesMoved在限制内?

时间:2016-09-18 08:31:24

标签: ios swift touchesbegan

我已经看到我在屏幕上拖动了。我的触摸开始/移动/结束代码工作,直到我试图保持视图不高于它开始时。

最终效果是我希望用户能够在文本视图顶部的textview上方拖动100像素的UIImageView,并且一旦" touchesEnded "如果用户将其放在文本字段上,则称其为动画回原始位置并运行相应的代码。

我在理论上知道如何对所有这些进行编码,我只是无法让实际运动起作用。

为了让视图不会高于它开始的位置,我尝试了:

 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let position = touch.location(in: self.superview)
        if position.y >= originalY // calculated in touches began with  originalY = self.center.x  {
        self.center = CGPoint(x: originalX, y: position.y)

}

但这会产生一些奇怪的副作用,我点击并向下拖动。视图停留在它所处的位置,并且只有在视图通过我的文本字段/屏幕顶部附近的其他按钮向下移动到它的位置并开始向上和向下滚动之前。

任何想法如何只让我的观点Y.  在没有所有这些奇怪的行为的情况下被移动到它开始的地方和某个点?

编辑:

我摆脱了对Y的检查并且拖动按预期工作,但是一旦我在我的文本域/按钮区域下方向上,当我做我的触摸结束并重置我的X和Y回到顶部,我的视图停在文本字段/按钮下方。所以看起来由于某些原因我的观点被挂在屏幕上的其他元素上。

1 个答案:

答案 0 :(得分:1)

两件事:

反向y

请注意,y位于0顶部,view位于heighty位于底部。在对position进行约束时考虑到这一点。在touchesDidMove:打印subviews以获取更多信息。

子视图

其他touchEvents可能会窃取您的touchesCancelled(with:)。实施views以获得更多洞察力,并确保您的可移动视图位于其他subviews

之前

如果其他touchEvents获得了view,当触摸返回touchesBegan(with:)时,它会再次触发origin,并会抵消<?php $connection= new mysqli($DB_host,$DB_user,$DB_pass,$DB_name); $query = mysqli_query($connection,"SELECT * FROM new_record ORDER BY id"); while ($row = mysqli_fetch_array($query)) { $fileName = $row['name']; $fileContents = file_get_contents("txt/$fileName"); echo ("$fileContents"); } ?>