ios - 使用 UIPanGesture 停止 UIView 离开容器?

标签 ios swift uiview uipangesturerecognizer

我已经设法用平移手势阻止我的 UIView 离开容器,但我正在努力实现的是将它停止在容器的边缘。目前它正好到达最后一个像素边缘,而不是可移动 View 的边缘。

我尝试更改我认为可行的帧值,但无法产生正确的结果。不确定我有多接近或是否有更简单的方法?

我如何将它停在可移动 View 的边缘而不是最后一个像素? enter image description here

//Container is self.sliderContainer
//Green Block is sender.view which has a UIGesture applied

    var location = sender.locationInView(self.view)

    var newFrame = CGRectMake(0, 0, self.sliderContainer.frame.width, self.sliderContainer.frame.height)

    let obstacleViewFrame = self.view.convertRect(self.sliderContainer.frame, fromView: self.sliderContainer.superview)

        // Check if the touch is inside the obstacle view
        if CGRectContainsPoint(obstacleViewFrame, location) {

            sender.view!.center.x = sender.view!.center.x + translation.x

            sender.setTranslation(CGPointZero, inView: self.view)
        }

最佳答案

我建议以最简单的方式来做,不限制手势,只确保 rect 不会越界:

let movingView = sender.view!
let minCenterX = movingView.frame.size.width / 2
let maxCenterX = self.sliderContainer.frame.width - movingView.frame.size.width / 2

let newCenterX = movingView.center.x + translation.x
movingView.center.x = min(maxCenterX, max(minCenterX, newCenterX))

关于ios - 使用 UIPanGesture 停止 UIView 离开容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091461/

相关文章:

ios - CKSubscriptionOptionsFiresOnRecordUpdate 类型的 CKSubscription 不起作用

ios - 我如何在 iOS swift 中对我的自定义 FBSDK 登录按钮进行操作

ios - 停止在屏幕上拖动 UIView

iphone - 改变 uidraw 中的颜色变化

javascript - 如何修复 iOS 13.x JavaScript 提示对话框键盘错误(与浏览器无关)

ios - 将 segue 上的数据传递给 View Controller (Swift)

ios - 通过 ARKit 向 3d 模型添加动画

ios - JSQMessageData 追加 Json 数据

iphone - UIView动画问题(将扩展动画与收缩动画匹配)

swift - 在叠加层上向 ui TableView 添加搜索栏