Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在UIScrollView中启用缩放_Iphone_Uiscrollview - Fatal编程技术网

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
    }