UIScrollView(UIScrollViewDelegate)
UIScrollView(Auto Layout)
1 UIScrollView
2 UIScrollViewDelegate
3 实战演练
UIScrollView是一个很强大的类,它能提供比手机界面更大的空间给用户查看。如一张很大的图片,用户即可在手机上移动和捏合查看图片。
UIScrollView向下延生了三个子类UICollectionView、UITableView和UITextView。这都是我们工作中常用的View。
// 动态设置原点,即移动
public func setContentOffset(_ contentOffset: CGPoint, animated animated: Bool)
// 原点所对应的contentview的坐标
public var contentOffset: CGPoint
// 可移动的区域
public var contentSize: CGSize
// contentview和边的距离
public var contentInset: UIEdgeInsets
// 能否滚动
public var scrollEnabled: Bool
// 锁定某个方向的滚动
public var directionalLockEnabled: Bool
// 能否自动回到顶部
public var scrollsToTop: Bool
// 可视区域
public func scrollRectToVisible(rect: CGRect, animated: Bool)
// 以页的形式滚动
public var pagingEnabled: Bool
// 全局滚动阻力
public var bounces: Bool
// y轴滚动阻力
public var alwaysBounceVertical: Bool
// x轴滚动阻力
public var alwaysBounceHorizontal: Bool
// 滚动的速度
public var decelerationRate: CGFloat
// 用户是否触摸屏幕
public var tracking: Bool { get }
// 是否在滚动
public var dragging: Bool { get }
// 是否在减速动画
public var decelerating: Bool { get }
// 滚动条的样式
public var indicatorStyle: UIScrollViewIndicatorStyle
// 滚动条的位置
public var scrollIndicatorInsets: UIEdgeInsets
// 是否显示x轴滚动条
public var showsHorizontalScrollIndicator: Bool
// 是否显示y轴滚动条
public var showsVerticalScrollIndicator: Bool
// 随时显示滚动条
public func flashScrollIndicators()
// 缩放的最小比例
public var minimumZoomScale: CGFloat
// 缩放的最大比例
public var maximumZoomScale: CGFloat
// 当前缩放比例
public var zoomScale: CGFloat // default is 1.0
// 是否动画设置缩放
public func setZoomScale(scale: CGFloat, animated: Bool)
// 设置缩放区域
public func zoomToRect(rect: CGRect, animated: Bool)
//缩放阻力效果
public var bouncesZoom: Bool
// 用户是否在进行缩放操作
public var zooming: Bool { get }
// 是否有操作指定的缩放
public var zoomBouncing: Bool { get }
UIScrollViewDelegate是UIScrollView的核心代理,我们可以通过它监听UIScrollView的相关动作。
// MARK: - 滚动持续中
func scrollViewDidScroll(scrollView: UIScrollView)
// MARK: - 手指触摸开始滚动
func scrollViewWillBeginDragging(scrollView: UIScrollView)
// MARK: 手指离开屏幕后,移动速度
func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
// MARK: 手指离开屏幕后,是否有减速动画
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool)
// MARK: 手指离开屏幕后,滚动视图滚动开始减速动画
func scrollViewWillBeginDecelerating(scrollView: UIScrollView)
// MARK: 手指移动引起的滚动动画结束
func scrollViewDidEndDecelerating(scrollView: UIScrollView)
// MARK: 使用setContentOffset/scrollRectVisible:animated:调用的滚动动画结束
func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView)
// MARK: 缩放持续中
optional public func scrollViewDidZoom(scrollView: UIScrollView)
// MARK: 返回要缩放的View
optional public func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
// MARK: 开始缩放
optional public func scrollViewWillBeginZooming(scrollView: UIScrollView, withView view: UIView?)
// MARK: 缩放停止
optional public func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat)
// MARK: 点击顶部的时间,是否回滚到顶部
optional public func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool
// MARK: 回滚到顶部结束
optional public func scrollViewDidScrollToTop(scrollView: UIScrollView)
本次讲解使用纯代码的方式向大家演示怎么使用UIScrollView。这里使用了类YJScrollViewDelegateVC.swift
//
// YJScrollViewDelegateVC.swift
// UI
//
// CSDN:http://blog.csdn.net/y550918116j
// GitHub:https://github.com/937447974/Blog
//
// Created by yangjun on 15/12/17.
// Copyright © 2015年 阳君. All rights reserved.
//
import UIKit
/// UIScrollViewDelegate
class YJScrollViewDelegateVC: UIViewController, UIScrollViewDelegate {
/// 照片
var imageView: UIImageView!
/// UIScrollView
var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
self.title = "纯代码"
let scrollItem = UIBarButtonItem(title: "Scroll", style: .Plain, target: self, action: "onClickScroll")
let zoomItem = UIBarButtonItem(title: "Zoom", style: .Plain, target: self, action: "onClickZoom")
self.navigationItem.rightBarButtonItems = [scrollItem, zoomItem]
}
}
运行项目可看见如下效果图。
我们使用一张照片为大家演示缩放和移动功能,这里显示照片。
在viewDidLoad()方法中添加如下代码
// 填充UIScrollView
self.scrollView = UIScrollView(frame: self.view.frame)
self.view.addSubview(self.scrollView)
self.scrollView.delegate = self
// 图片
let image = UIImage(named: "ScrollViewBigImage")
self.imageView = UIImageView(image: image)
self.scrollView.addSubview(self.imageView)
self.scrollView.contentSize = image!.size // 可移动区域
这里设置了contentSize属性,照片才可以移动。
运行项目看见如下效果图。
此时你已经可以移动照片了。
我们还可以通过代码动态移动照片。
实现onClickScroll()方法。
// MARK: 移动
func onClickScroll() {
print(__FUNCTION__)
var point = self.scrollView.contentOffset // 当前点
point.x += 100 // 向左移动100
point.x = point.x >= self.scrollView.contentSize.width ? 0 : point.x
self.scrollView.setContentOffset(point, animated: true)// 动画移动
}
运行项目后点击界面的Scroll,即可看见照片动画左移。
缩放照片会负责一点,需要借助UIScrollViewDelegate代理。
设置缩放的最大和最小比例,在viewDidLoad()方法中添加如下代码
// 缩放
self.scrollView.minimumZoomScale = 0.5
self.scrollView.maximumZoomScale = 2
UIScrollView并不知道你要缩放那个View,故需要实现代理方法。
// MARK: 返回要缩放的View
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
print(__FUNCTION__)
return self.imageView
}
UIScrollView还支持动画缩放View。
实现onClickZoom()方法。
// MARK: 缩放
func onClickZoom() {
print(__FUNCTION__)
var zoomScale = self.scrollView.zoomScale // 当前缩放
zoomScale += 0.5
if zoomScale >= self.scrollView.maximumZoomScale {
zoomScale = self.scrollView.minimumZoomScale
}
self.scrollView.setZoomScale(zoomScale, animated: true) // 动画缩放
}
点击界面的Zoom按钮即可看见缩放动画。
Swift
UIScrollView Class Reference
UIScrollViewDelegate Protocol Reference
时间 | 描述 |
---|---|
2015-12-18 | 博文完成 |
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974/Blog