如何有效地缩放集合视图中的图像视图

时间:2016-03-30 11:04:08

标签: ios

  1. 我正在尝试借助滚动视图缩放集合视图中的图像视图。但是因为我无法获得任何资源(虽然我确实通过最近的Ray Wenderlich UIScrollView教程用于缩放图像视图)来缩放集合视图中的任何视图,所以我通过更改图像视图的约束并设置滚动视图的最小缩放比例(因为图像大小可以更小或更大)。

    我的问题是我无法限制图像尝试缩放(In和Out),因此当单元格deques(布局子视图中设置缩放比例的商业)看起来非常奇怪时,最初会尝试更改其约束。 / p>

    Image zooming initially

  2. 在同一部分中,我不希望每次在scrollViewDidZoom方法中居中图像视图,因为它不平滑,但我想在单元格deques后立即居中图像视图。为此,我应该在changeConstraints中调用layoutSubviews方法 方法或在视图控制器中通过访问单元格的viewDidLayoutSubviews方法(我还有一个问题,它有时不会在viewDidLayoutSubviews中给出单元格)。但是在这些方法中,图像视图在中心处不能正确对齐。

    那是因为在layoutSubviewsviewDidLayoutSubviews中,我无法在滚动视图结束缩放后立即获得正确的图像视图大小。因此frame.size.width - condoImageView.frame.size.width不会取消 并且它会给出一些最初不应该发生的x偏移。

  3. 代码

    我的布局子视图代码在这里

     override func layoutSubviews() {
        super.layoutSubviews()
    
        minimumZoomScale = getTheInitialZoomScale()
        maximumZoomScale = minimumZoomScale * kMaximumZoomScaleMultiplier
        scrollView.zoomScale = minimumZoomScale
        changeConstraints()
    }
    

    滚动视图委托方法在这里

    func scrollViewDidZoom(scrollView: UIScrollView)  {
        changeConstraints()
    }
    func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
        changeConstraints()
    }
    
    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        changeConstraints()
    }
    func scrollViewWillBeginDecelerating(scrollView: UIScrollView) {
        changeConstraints()
    }
    
    func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if !decelerate {
            changeConstraints()
        }
    }
    
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }
    func changeConstraints() {
    
        let yOffset = max(0, (frame.size.height - condoImageView.frame.size.height) / 2)
        imageViewTopConstriant.constant = yOffset
        imageViewBottomConstriant.constant = yOffset
    
        let xOffset = max(0, (frame.size.width - condoImageView.frame.size.width) / 2)
        imageViewLeadingConstriant.constant = xOffset
        imageViewTrailingConstriant.constant = xOffset
    
        self.layoutIfNeeded()
    }
    

    在视图控制器中查看布局子视图代码

     override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let cell = collectionView.cellForItemAtIndexPath(NSIndexPath(forItem: selectedImageIndex, inSection: 0)) as? CollectionViewCell
        cell?.changeConstraints()
    }
    

    屏幕截图

    Image not centring properly

    这迫使我在changeConstraints中调用scrollViewDidZoom方法。

    所以请有人建议我做些什么来有效地进行这种缩放?

0 个答案:

没有答案