首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平移手势-滑动手势冲突

平移手势-滑动手势冲突
EN

Stack Overflow用户
提问于 2014-11-04 04:51:27
回答 3查看 5.4K关注 0票数 2

我正在尝试创建一个应用程序,它复制了苹果的照片应用程序(iPhone)的缩放,平移和滚动照片图像的能力。(我也想在查看pdf和其他文档时使用相同的控件。)我使用点击手势来显示/隐藏导航栏,使用滑动手势来从左向右滚动图像,反之亦然。然后我得到了收缩手势来放大和缩小,但当我添加平移手势来在放大的图像中移动时,滑动手势停止工作。

我在StackOverflow上的其他地方找到了潜在的解决方案,包括使用shouldRecognizeSimultaneouslyWithGestureRecognizer,但到目前为止,我还没有能够解决这个冲突。有什么建议吗?

代码如下:

代码语言:javascript
复制
func gestureRecognizer(UIPanGestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer UISwipeGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

@IBAction func handlePinch(sender: UIPinchGestureRecognizer) {

    sender.view!.transform = CGAffineTransformScale(sender.view!.transform, sender.scale, sender.scale)
    sender.scale = 1
}

@IBAction func handlePan(sender: UIPanGestureRecognizer) {

    self.view.bringSubviewToFront(sender.view!)
    var translation = sender.translationInView(self.view)
    sender.view!.center = CGPointMake(sender.view!.center.x + translation.x, sender.view!.center.y + translation.y)
    sender.setTranslation(CGPointZero, inView: self.view)
}

@IBAction func handleSwipeRight(sender: UISwipeGestureRecognizer) {

    if (self.index == 0) {
    self.index = ((photos.count) - 1);
    }
    else
    {
    self.index--;
    }

    // requireGestureRecognizerToFail(panGesture)

    setImage()
}
EN

回答 3

Stack Overflow用户

发布于 2014-11-04 05:51:44

您不想要shouldRecognizeSimultaneouslyWithGestureRecognizer: (它允许两个手势同时发生)。例如,如果您想同时收紧和平移,这是很有用的。但是在你同时平移和滑动的情况下,同时的手势不会有帮助。(如果有什么不同的话,那就是同时认识到这两种情况可能会让情况变得混乱。)

取而代之的是,你可能想要建立requireGestureRecognizerToFail:的滑动和平移手势的优先级(例如,只有在滑动失败的情况下才进行平移)。

或者更好的是,完全取消滑动手势,只使用平移手势,如果你被缩小,这将是一个从一个图像导航到下一个图像的交互式手势,如果放大,则平移图像。交互式平移手势通常是一种更令人满意的用户体验;例如,如果从一张照片滑动到下一张照片,可以停止中间的平移手势并返回。如果你看看Photos.app,你会发现它实际上是使用了一个平移手势来从一个图像滑动到另一个图像,而不是一个滑动手势。

票数 4
EN

Stack Overflow用户

发布于 2014-11-21 04:18:56

我在http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift上发现了一个教程,它很好地介绍了UIScrollView作为一种在Swift中结合缩放、平移和分页的方式。我推荐给任何想要学习如何让这些手势很好地协同工作的人。

票数 0
EN

Stack Overflow用户

发布于 2016-11-22 01:58:39

在类似的情况下,我使用了另一种方法:扩展的平移手势来支持卷帘:

代码语言:javascript
复制
 // in handlePan()
switch recognizer.state {


 struct Holder {
                static var lastTranslate : CGFloat = 0
                static var prevTranslate : CGFloat = 0
                static var lastTime : TimeInterval = 0
                static var prevTime : TimeInterval = 0
            }

        case .began:

            Holder.lastTime = Date.timeIntervalSinceReferenceDate
            Holder.lastTranslate = translation.y
            Holder.prevTime = Holder.lastTime
            Holder.prevTranslate = Holder.lastTranslate


            //perform appropriate pan action

        case .changed:

            Holder.prevTime = Holder.lastTime
            Holder.prevTranslate = Holder.lastTranslate
            Holder.lastTime = Date.timeIntervalSinceReferenceDate
            Holder.lastTranslate = translation.y

            //perform appropriate pan action

        case .ended ,.cancelled:

            let seconds = CGFloat(Date.timeIntervalSinceReferenceDate) - CGFloat(Holder.prevTime)
            var swipeVelocity : CGFloat = 0
            if seconds > 0 {
                swipeVelocity = (translation.y - Holder.prevTranslate)/seconds
            }

            var shouldSwipe : Bool = false
            if Swift.abs(swipeVelocity) > velocityThreshold {
                shouldSwipe = swipeVelocity < 0
            }
            if shouldSwipe {
               // perform swipe action
            } else {
                // perform appropriate pan action
            }

        default:
            print("Unsupported")
        }

您所需要做的就是为您的滑动手势找到合适的velocityTreshold

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26722998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档