iOS UIScrollView和缩放
在本教程中,我们将在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 } }
要放大模拟器,请按选项键,然后单击并拖动鼠标控件。