Iphone 如何在UIScrollView中启用缩放
如何在Iphone 如何在UIScrollView中启用缩放,iphone,uiscrollview,Iphone,Uiscrollview,如何在UIScrollView中启用缩放?答案是: 滚动视图还处理内容的缩放和平移。当用户做出缩进或缩进手势时,滚动视图会调整内容的偏移和比例。手势结束时,管理内容视图的对象应根据需要更新内容的子视图。(请注意,手势可能会结束,手指仍可能向下。)当手势进行时,滚动视图不会向子视图发送任何跟踪调用 UIScrollView类可以有一个必须采用UIScrollViewDelegate协议的委托。要使缩放和平移正常工作,代理必须同时实现ViewForZoomingsCrollView:和ScrollV
UIScrollView
中启用缩放?答案是:
滚动视图还处理内容的缩放和平移。当用户做出缩进或缩进手势时,滚动视图会调整内容的偏移和比例。手势结束时,管理内容视图的对象应根据需要更新内容的子视图。(请注意,手势可能会结束,手指仍可能向下。)当手势进行时,滚动视图不会向子视图发送任何跟踪调用
UIScrollView类可以有一个必须采用UIScrollViewDelegate协议的委托。要使缩放和平移正常工作,代理必须同时实现ViewForZoomingsCrollView:和ScrollViewDiEndZooming:withView:atScale:;此外,最大(最大缩放比例)和最小(最小缩放比例)缩放比例必须不同
因此:
UIScrollViewDelegate
并在UIScrollView
实例上设置为delegate
的委托viewForZoomingInScrollView:
()它必须返回您感兴趣的内容视图。您还可以选择性地实现ScrollViewDiEndZooming:withView:atScale:
UIScrollView
实例上,必须将minimumZoomScale
和maximumZoomScale
设置为不同的值(默认值为1.0)注意:有趣的是,如果你想打破缩放,该怎么办。在
viewForZooming…
方法中返回nil
是否足够?它确实会打断缩放,但一些手势会弄乱(两个手指)。因此,要中断缩放,应将最小和最大缩放比例设置为1.0。我认为这不适用于iOS 5.0和Xcode 4.3+
我在这里寻找相同的,我发现这是它的图像,但它可能会帮助你
通读一下Ray Wenderlich教程: 如果您按照“滚动和缩放较大的图像”一节进行操作,它将获得一个图像,并使您能够进行收缩和缩放 如果链接被更改,以下是主要信息: 将此代码放入视图控制器(这将设置主要功能): 将其添加到类中:
func centerScrollViewContents() {
let boundsSize = scrollView.bounds.size
var contentsFrame = imageView.frame
if contentsFrame.size.width < boundsSize.width {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
} else {
contentsFrame.origin.x = 0.0
}
if contentsFrame.size.height < boundsSize.height {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
} else {
contentsFrame.origin.y = 0.0
}
imageView.frame = contentsFrame
}
如果您想了解更多详细信息,请阅读本教程,但这几乎涵盖了所有内容。请确保将viewController设置为scrollViews委托,并实现:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
回答得很好——这正是我所需要的。(另外,我不必去看视频!;)谢谢。最重要的是这里的第二步,在原始答案中找不到。这应该标记为真实答案!还有一个非常好的教程,介绍如何通过编程设置最小和最大缩放级别,点击缩放,等等。我不明白为什么这些控件不具备所有功能无需设置scrollview的内容大小,并且上述解决方案在Xcode 4.3+和iOS 5.0上运行完美。尽管这可能是一个非常好的答案,但本质上是一个“仅链接”的答案。您应该包含一些链接中的信息,这样,如果链接后面的信息曾经更改/丢失,那么答案仍然是有意义的。虽然这可能是一个很好的答案,但它本质上是一个“仅链接”的答案。您应该包含一些链接中的信息,这样,如果链接后面的信息曾经更改/丢失,那么答案仍然是有意义的。看见
func scrollViewDoubleTapped(recognizer: UITapGestureRecognizer) {
// 1
let pointInView = recognizer.locationInView(imageView)
// 2
var newZoomScale = scrollView.zoomScale * 1.5
newZoomScale = min(newZoomScale, scrollView.maximumZoomScale)
// 3
let scrollViewSize = scrollView.bounds.size
let w = scrollViewSize.width / newZoomScale
let h = scrollViewSize.height / newZoomScale
let x = pointInView.x - (w / 2.0)
let y = pointInView.y - (h / 2.0)
let rectToZoomTo = CGRectMake(x, y, w, h);
// 4
scrollView.zoomToRect(rectToZoomTo, animated: true)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}