在UIScrollView - Swift的子视图上使用手势识别器

时间:2016-12-07 05:04:52

标签: ios uiscrollview swift3

I have attached an image here 我是iOS开发的新手。我的问题如下:

我想使用手势控制在宽度之外滑动scrollView。 确切地说,我希望UIScrollViewsubview(只有一个subview)中执行滑动时滚动。

我已经经历了几个StackOverflow问题,但我无法得到正确答案。

非常感谢您的帮助!

class ViewController: UIViewController, UIGestureRecognizerDelegate {

@IBOutlet weak var scrollView: UIScrollView!

var images = [UIImageView]()
override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool) {
    var contentWidth: CGFloat = 0.0
    for x in 0...2 {
        let image = UIImage(named: "icon\(x).png")
        let imageView = UIImageView(image:image)
        images.append(imageView)

        var newX: CGFloat = 0.0

        newX = scrollView.frame.size.width/2 + scrollView.frame.size.width * CGFloat(x)
        contentWidth += newX

        scrollView.addSubview(imageView)
        imageView.frame = CGRect(x: newX - 75, y: (scrollView.frame.size.height/2) - 75, width: 150, height: 150)

    }
    scrollView.clipsToBounds = false
    scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)
}

正如您在图像中看到的那样,我的UIScrollView的宽度具有灰色背景色(我这样做是为了说明我的观点)。现在我想在用户在子视图(非灰色)UIImageView中滑动时滚动滚动视图。

我添加了以下函数并返回yes以使两个视图同时识别手势。但是,我没有得到理想的结果。有人可以看看吗?

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

2 个答案:

答案 0 :(得分:1)

view.addGestureRecognizer(scrollView.panGestureRecognizer)放入viewDidLoad函数。

它最终做的是指定scrollview的手势识别器在主视图中查找手势。因此,即使手势在scrollview rect之外,它也会自动移动scrollview的内容。

答案 1 :(得分:0)

您可以将该子视图中的触摸事件转发到scrollview。请参阅此answer