仅将一些触摸事件从一个视图传递到另一个视图

时间:2016-09-19 09:42:35

标签: ios swift uiscrollview

我正在尝试实现可以​​缩放的图像视图,并且还可以在顶部滚动文本。在我的视图控制器中,我有一个包含图像视图的滚动视图,并设置为放大而没有问题。

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var scrollView: UIScrollView!


    //First try getting the image setup correctly

    override func viewDidLoad() {
        super.viewDidLoad()
        setupImageView()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func setupImageView() {

        scrollView.contentSize = imageView.bounds.size
        scrollView.minimumZoomScale = 0.5
        scrollView.maximumZoomScale = 2.0

    }

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }


    func scrollViewDidZoom(scrollView: UIScrollView) {

        let imageViewSize = imageView.frame.size
        let scrollViewSize = scrollView.bounds.size

        let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
        let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0

        scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
    }


}

现在我想在顶部放置另一个滚动视图,因此如果拖动文本标签可以滚动,但是在触摸时图像仍然可以被挤压和缩放。我在图像顶部放置了另一个滚动视图(不在内部),然后在内部放置了一个内容视图和UILabel,就像我在IB中设置滚动视图时一样。当然文本滚动但是图像不会捏合和缩放,除非我将内容视图和顶部滚动视图子类化为:

override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
        for subview in subviews as [UIView] {
            if !subview.hidden && subview.alpha > 0 && subview.userInteractionEnabled && subview.pointInside(convertPoint(point, toView: subview), withEvent: event) {
                return true
            }
        }
        return false
    }

enter image description here

这会将触摸传递给下面的滚动视图。但是现在我无法滚动文字了!有没有办法设置它,所以测试的UILabel没有通过触摸并且可以滚动但是外面确实通过并允许图像缩放?任何关于此的指示都会非常感激!

1 个答案:

答案 0 :(得分:0)

ScrollView黑客并不总是最直观的过程。但在这种情况下,为什么不让UIViewController实施UIScrollViewDelegate协议并使用zoomFeature中内置的UIScrollview

minimumZoomScale设置maximumZoomScaleUIScrollView 并让scrollViewDelegate实现以下功能并返回您希望imageView的{​​{1}}:

zoom

API参考 - UIScrollView - UIScrollViewDelegate