我正在尝试借助滚动视图缩放集合视图中的图像视图。但是因为我无法获得任何资源(虽然我确实通过最近的Ray Wenderlich UIScrollView教程用于缩放图像视图)来缩放集合视图中的任何视图,所以我通过更改图像视图的约束并设置滚动视图的最小缩放比例(因为图像大小可以更小或更大)。
我的问题是我无法限制图像尝试缩放(In和Out),因此当单元格deques(布局子视图中设置缩放比例的商业)看起来非常奇怪时,最初会尝试更改其约束。 / p>
在同一部分中,我不希望每次在scrollViewDidZoom
方法中居中图像视图,因为它不平滑,但我想在单元格deques后立即居中图像视图。为此,我应该在changeConstraints
中调用layoutSubviews
方法
方法或在视图控制器中通过访问单元格的viewDidLayoutSubviews
方法(我还有一个问题,它有时不会在viewDidLayoutSubviews中给出单元格)。但是在这些方法中,图像视图在中心处不能正确对齐。
那是因为在layoutSubviews
或viewDidLayoutSubviews
中,我无法在滚动视图结束缩放后立即获得正确的图像视图大小。因此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()
}
在视图控制器中查看布局子视图代码
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let cell = collectionView.cellForItemAtIndexPath(NSIndexPath(forItem: selectedImageIndex, inSection: 0)) as? CollectionViewCell
cell?.changeConstraints()
}
这迫使我在changeConstraints
中调用scrollViewDidZoom
方法。
所以请有人建议我做些什么来有效地进行这种缩放?