iOS UIScrollView和缩放

时间:2020-02-23 14:45:57  来源:igfitidea点击:

在本教程中,我们将在iOS应用程序中实现UIScrollView和"缩放"功能。

iOS UIScrollView

通过使虚拟屏幕尺寸大于当前屏幕尺寸,UIScrollView用于在屏幕上显示比实际可见更多的内容。

UITableView是UIScrollView的子类,默认情况下包含滚动条。

一个UIScrollView只能有一个与Android类似的单个根子级。

让我们开始XCode Single View Application项目,并通过实施学习UIScrollView。

配置项目

添加UIScrollView

打开Main.storyboard,然后在ViewController中添加一个UIScrollView并将其固定到父视图的所有边缘。

因此,我们将UIScrollView添加到了ViewController并将其设置为覆盖除安全区域之外的所有边缘。

添加内部视图

我们将在ScrollView内添加一个View,它将作为根子级。
我们将其固定在边缘,并在上方父视图中设置View的等高和等宽约束。

接下来,我们将等高优先级更改为"低",这样,当我们将视图高度更改为大于当前屏幕的高度时,将采用新的高度,并且屏幕将滚动。

请注意,更改优先级会在视图的高度上显示一条虚线。

现在,让我们在此视图中添加元素。

在内部视图中添加元素

确保将元素添加到内部视图,而不是直接在ScrollView或者Parent View上。

我们添加了两个固定高度的矩形视图。
现在,ScrollView准备就绪,添加了自定义元素。

您认为它会滚动吗?

没有!

因为内部视图的高度仍适合屏幕。
我们需要将内部视图的高度更改为更大的值。

让我们为高度添加一个新的约束1000。

我们使用以前使用的相同技术添加了一些View元素。

我们更改了内容视图的高度约束,该视图是UIScrollView内部的根视图。

请注意"内容视图"高度如何超出屏幕。
我们还通过修改垂直间距将视图移至了下方。

让我们看看它在模拟器中的外观:

哇,我们可以滚动!请注意,UIScrollView的背景颜色是白色。
我们可以更改它,并将在下一部分中进行。
在以下部分中,我们将使用UIImageView作为UIScrollView的根子级,并查看其如何水平和垂直滚动以展示大图像。

UIImageView上的UIScrollView

我们将为此部分创建一个新的ViewController,并使用Segue将其连接到上一个。

创建一个新的swift文件以连接到该视图控制器。
以下是我们空的ImageViewController.swift。

import UIKit

class ImageViewController : ViewController{
  
  override func viewDidLoad() {
      
  }
  
  override func viewDidAppear(_ animated: Bool) {
      
  }
  
  override func didReceiveMemoryWarning() {
      
  }
  
}

让我们在这个新的ViewController中添加一个UIScrollView,然后在UIScrollView中添加一个UIImageView。

我们将UIImageView图像尺寸设置为超出屏幕尺寸的值。

ImageViewController.swift文件在情节提要中链接。

现在在ImageViewController.swift中,我们可以通过以下方式更改scrollView的背景:

class ImageViewController : ViewController{
  
  @IBOutlet weak var scrollView: UIScrollView!
  override func viewDidLoad() {
      scrollView.backgroundColor = UIColor.black
  }
  
  override func viewDidAppear(_ animated: Bool) {
      
  }
  
  override func didReceiveMemoryWarning() {
      
  }
  
}

注意:必须使用助手编辑器中的IBOutlet拖放将UIScrollView从情节提要板连接到ViewController。

让我们看一下模拟器中的输出。

现在,scrollView背景色为黑色。

缩放和关闭

我们可以更改contentOffset属性,以便在首次加载图像时在scrollView中显示图像的不同部分。
另外,要设置缩放比例,我们使用zoomScale,minimumZoomScale,maximumZoomScale属性。

import UIKit

class ImageViewController : ViewController, UIScrollViewDelegate{
  
  @IBOutlet weak var imageView: UIImageView!
  @IBOutlet weak var scrollView: UIScrollView!
  override func viewDidLoad() {
      scrollView.backgroundColor = UIColor.black
      scrollView.delegate = self
      scrollView.contentOffset = CGPoint(x: 500, y: 200)
      
      scrollView.delegate = self
      scrollView.minimumZoomScale = 0.1
      scrollView.maximumZoomScale = 4.0
      scrollView.zoomScale = 1.0
  }

  func viewForZooming(in scrollView: UIScrollView) -> UIView? {
      return imageView
  }
  
}

要放大模拟器,请按选项键,然后单击并拖动鼠标控件。