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

  1. 我正尝试在滚动视图的帮助下缩放集合视图中的图像视图。 但是由于我无法获取任何资源(尽pipe我通过最近的Ray Wenderlich UIScrollView教程来缩放图像视图)来缩放集合视图中的任何视图,所以我通过更改图像视图的约束和设置滚动视图的最小缩放比例(因为图像大小可以更小或更大)。

    我的问题是,我不能限制图像试图缩放(入和出),因此试图改变它的约束最初时单元deques(布局子视图设置缩放比例biz)看起来很奇怪。

    最初的图像缩放

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

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

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

  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() } 

View在视图控制器中做了布局子视图代码

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

屏幕截图

图像没有正确居中

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

所以请有人build议我该怎么做,以有效地工作这个缩放?