如何使在Swift中使用UIScrollView进行滚动和缩放

 我来答
time陌言成殇
2015-07-18 · TA获得超过8.4万个赞
知道大有可为答主
回答量:1.4万
采纳率:91%
帮助的人:9373万
展开全部

使用iOS\Source\Cocoa Touch Class subclass模版创建一个新的文件。将类命明为CustomScrollViewController并将父类设置为UIViewController。确保“Also create XIB file”没有选中,语言使用Swift。 单击Next将文件保存到工程目录中。

打开CustomScrollViewController.swift替换为下面内容:

   import UIKit
    class CustomScrollViewController: UIViewController, UIScrollViewDelegate {
      @IBOutlet var scrollView: UIScrollView!
    }

打开Main.storyboard, 添加一个新的View Controller并和table的第二行通过push segue 进行连接。 将view controller的class修改成刚创建的CustomScrollViewController。

添加一个新的Scroll View并连接outlet和设置view controller作为它的delegate,就和上面的步骤一样。

然后, 打开CustomScrollViewController.swift并在你的scrollView outlet下面添加如下属性:

   var containerView: UIView!


实现viewDidLoad方法.

   override func viewDidLoad() {
      super.viewDidLoad()
      // 设置container view来保持你定制的视图层次
      let containerSize = CGSize(width: 640.0, height: 640.0)
      containerView = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size:containerSize))
      scrollView.addSubview(containerView)
      // 设置你定制的视图层次
      let redView = UIView(frame: CGRect(x: 0, y: 0, width: 640, height: 80))
      redView.backgroundColor = UIColor.redColor();
      containerView.addSubview(redView)
      let blueView = UIView(frame: CGRect(x: 0, y: 560, width: 640, height: 80))
      blueView.backgroundColor = UIColor.blueColor();
      containerView.addSubview(blueView)
      let greenView = UIView(frame: CGRect(x: 160, y: 160, width: 320, height: 320))
      greenView.backgroundColor = UIColor.greenColor();
      containerView.addSubview(greenView)
      let imageView = UIImageView(image: UIImage(named: "slow.png"))
      imageView.center = CGPoint(x: 320, y: 320);
      containerView.addSubview(imageView)
      // 告诉scroll view内容的尺寸
      scrollView.contentSize = containerSize;
      // 设置最大和最小的缩放系数
      let scrollViewFrame = scrollView.frame
      let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
      let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
      let minScale = min(scaleWidth, scaleHeight)
      scrollView.minimumZoomScale = minScale
      scrollView.maximumZoomScale = 1.0
      scrollView.zoomScale = 1.0
      centerScrollViewContents()
    }

viewDidLoad使用一个独立的根视图(root view)设置一个现实层级, 这个root view就是你的实例变量containerView。 然后你讲这个独立的视图添加到scroll view中。 这里就是关键所在 – 由于代理的回调viewForZoomingInScrollView只能返回一个视图,因此你只能想scroll view中添加一个视图。将zoomScale设置为1而不是minScale,这样内容视图就会在正常尺寸而不是适合屏幕的大小。

再次实现centerScrollViewContents和UIScrollViewDelegate的两个代理方法, 将原始版本中的imageView替换为containerView。

 

  func centerScrollViewContents() {
      let boundsSize = scrollView.bounds.size
      var contentsFrame = containerView.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
      }
      containerView.frame = contentsFrame
    }
    func viewForZoomingInScrollView(scrollView: UIScrollView!) -> UIView! {
      return containerView
    }
    func scrollViewDidZoom(scrollView: UIScrollView!) {
      centerScrollViewContents()
    }


构建和运行工程。 这次选择Custom View Scroll,可以浏览和缩放手动创建的一个UIView场景!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式