美文网首页花落√莫相思
38-Swift之UIScrollView

38-Swift之UIScrollView

作者: NetWork小贱 | 来源:发表于2017-06-27 16:24 被阅读77次

一 、 UIScrollView 的介绍

UIScrollView 是一个用于滑动展示的控件。

二、 UIScrollView 的初始化& 渲染

1、 初始化

var NwScrollView = UIScrollView.init()
NwScrollView = UIScrollView.init(coder: <#T##NSCoder#>)
var NwScrollView = UIScrollView.init(frame: <#T##CGRect#>)

2、渲染

/**
 渲染
 */
self.view.addSubview(NwScrollView)

三、代理事件

1、设置代理

/**
 设置代理
 */
NwScrollView.delegate = self

2、代理的各个事件函数解说

// MARK : UIScrollView 的代理事件处理

// TODO : UIScrollView 开始将要滑动(还没有动)就触发该方法
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    print("scrollViewWillBeginDragging")
}

// TODO : UIScrollView 只要滑动就出发该方法
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print("scrollViewDidScroll")
}

// TODO : 该方法从 iOS 5 引入,在 didEndDragging 前被调用,当 willEndDragging 方法中 velocity 为 CGPointZero(结束拖动时两个方向都没有速度)时,didEndDragging 中的 decelerate 为 false,即没有减速过程,willBeginDecelerating 和 didEndDecelerating 也就不会被调用。反之,当 velocity 不为 CGPointZero 时,scroll view 会以 velocity 为初速度,减速直到 targetContentOffset。值得注意的是,这里的 targetContentOffset 是个指针,没错,你可以改变减速运动的目的地,这在一些效果的实现时十分有用,实例章节中会具体提到它的用法,并和其他实现方式作比较
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    print("scrollViewWillEndDragging" + "---->" + "\(velocity.x)" + "--->" + "\(velocity.y)")
}

// TODO : 在用户结束拖动后被调用,decelerate 为 true 时,结束拖动后会有减速过程。注,在 didEndDragging 之后,如果有减速过程,scroll view 的 dragging 并不会立即置为 false,而是要等到减速结束之后,所以这个 dragging 属性的实际语义更接近 scrolling
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    print("scrollViewDidEndDragging" + "--->"  + "\(decelerate)")
}


// TODO : 减速动画开始前被调用
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
    print("scrollViewWillBeginDecelerating")
}

// TODO : UIScrollView 滑动结束时,调用该函数
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    print("scrollViewDidEndDecelerating")
}

// TODO : UIScrollView 的滚动动画结束。注意这个方法必须在不是人为拖动的情况下调用该函数,否则不调用
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
     print("scrollViewDidEndScrollingAnimation")
}


// MARK : UIScrollView 关于滑动到顶部的函数介绍
// TODO : 是否允许滑动到顶部
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
    return true
}
// TODO : UIScrollView 垂直滑动时候,滑动到顶部的时候,要点击App的状态栏,才能出发该函数,否则不触发
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
    print("scrollViewDidScrollToTop")
}



// MARK : UIScrollView 的捏合缩放方法的介绍
// TODO : 这个方法返回ScrollView 的中那个子控件被捏合缩放
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return NwImageView
}

// TODO : 这是捏合缩放开始调用该函数
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
    print("scrollViewWillBeginZooming")
}

// TODO : 捏合缩放中,调用该函数
func scrollViewDidZoom(_ scrollView: UIScrollView) {
    print("scrollViewDidZoom")
}

// TODO : 捏合缩放结束调用该函数
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    print("scrollViewDidEndZooming")
}

四、UIScrollView 的滚动和设置偏移

1、 想让UIScrollView滚动,就不要要求UIScrollView 的consentSize 要大于视图SIze。

/**
 设置UIScrollView的内容大小
 */
NwScrollView.contentSize = CGSize.init(width:  100, height:2 * self.view.bounds.height)

2、设置滚动指定的位置

/**
 设置内容偏移
 */
NwScrollView.setContentOffset(CGPoint.init(x: 100, y: 0), animated: true)

另一种方式:

/**
 scrollRectToVisible:animated:与setContentOffset:animated:类似,只不过是将scrollView坐标系内的一块指定区域移到scrollView的窗口中,如果这部分已经存在于窗口中,则什么也不做。
 */
NwScrollView.scrollRectToVisible(CGRect.init(x: 0, y: 200, width: 100, height: 200), animated: true)

3 、获取UIScrollView 的偏移量

/**
 获取偏移UIScrollView 的偏移量
 */
let NwPoint = NwScrollView.contentOffset
print("\(NwPoint.x)" + "\(NwPoint.y)")

4、 获取UIScrollView的内容大小

/**
 获取UIScroolView 的内容大小
 */
let NwCGSize = NwScrollView.contentSize
print("\(NwCGSize.width)" + "\(NwCGSize.height)")

五 、UIScrollView 的滚动条的显示

1、显示滚动条

/**
 是否展示水平&垂直的滚动条
 */
NwScrollView.showsVerticalScrollIndicator = true
NwScrollView.showsHorizontalScrollIndicator = true

2、设置滚动条的样式

/**
 设置UIScrollView 的滚动条的样式
 UIScrollViewIndicatorStyle
 
 black : 黑色的滚动条
 white : 纯白色的滚动条
 default : black
 */
NwScrollView.indicatorStyle = .white
/**
 如果元素内容大于UIScrollView的Size,这将显示的时候,先闪烁一下进度条
 */
NwScrollView.flashScrollIndicators()

3、 设置滚动条的滑动方向

/**
 设置UIScrollView 是否可以同时 水平& 垂直同时滑动
 true : 只可以单向滑动
 false : 两个方向可以同时滑动
 */
NwScrollView.isDirectionalLockEnabled = false

六 、UIScrollView中元素的缩放

1、 要实现元素的缩放必须先设置缩放大小

/**
 设置缩放比例
 */
NwScrollView.minimumZoomScale = 0.5
NwScrollView.maximumZoomScale = 1.5

2、返回缩放的图层(UIVeiw)

// MARK : UIScrollView 的捏合缩放方法的介绍
// TODO : 这个方法返回ScrollView 的中那个子控件被捏合缩放
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return NwImageView
}

3、 缩放处理时调用的函数

// TODO : 这是捏合缩放开始调用该函数
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
    print("scrollViewWillBeginZooming")
}

// TODO : 捏合缩放中,调用该函数
func scrollViewDidZoom(_ scrollView: UIScrollView) {
    print("scrollViewDidZoom")
}

// TODO : 捏合缩放结束调用该函数
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    print("scrollViewDidEndZooming")
}

七、是否延时处理UIScrollVieiw 上的手势

/**
 delaysContentTouches:是否推迟触屏手势处理,默认值为YES。设置为YES的时候,系统在确定是否发生scroll事件之后,才会处理触屏手势,否则,则会立即调用touchesShouldBegin:withEvent:inContentView:方法
 */
NwScrollView.delaysContentTouches = true
NwScrollView.touchesShouldBegin([UITouch.init()], with: UIEvent.init(), in: NwScrollView)
NwScrollView.touchesShouldCancel(in: NwScrollView)

八、获取UIScrollVIew 是否跟踪& 拖拽 & 减速

/**
 判断UIScrollView 是否开启跟随
 */
let isTrack = NwScrollView.isTracking
print(isTrack)

/**
 判断UIScrollView 是否拖拽
 */
let  isDragg = NwScrollView.isDragging
print(isDragg)

/**
 判断UIScrollView 是否滑动减速
 */
let isDecelerat = NwScrollView.isDecelerating
print(isDecelerat)

十、 UIScrollView 设置翻页效果&是否允许滑动

/**
 是否启动翻页效果
 */
NwScrollView.isPagingEnabled = true

/**
 控制UIScrollView 的滑动是否允许
 */
NwScrollView.isScrollEnabled = true

十一、 UIScrollView 的反弹效果

1、 反弹效果的设置

/**
 是否可以反弹
 */
NwScrollView.bounces = true

2、 特殊的反弹

/**
 这是当UIScrollView 中元素的内容小于 UIScrollView的consize 的时,可以有反弹效果
 */
NwScrollView.alwaysBounceHorizontal = true
NwScrollView.alwaysBounceVertical = true

十二、 UIScrollView 的回到顶部相关函数&属性的介绍

1、 设置允许触发回到顶部的函数

/**
 允许滑动到顶部
 */
NwScrollView.scrollsToTop = true

或者实现两个函数

    // MARK : UIScrollView 关于滑动到顶部的函数介绍
    // TODO : 是否允许滑动到顶部
    func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
        return true
    }

2、 想要触发顶部事件需要点击App的状态

// TODO : UIScrollView 垂直滑动时候,滑动到顶部的时候,要点击App的状态栏,才能出发该函数,否则不触发
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
    print("scrollViewDidScrollToTop")
}

相关文章

网友评论

    本文标题:38-Swift之UIScrollView

    本文链接:https://www.haomeiwen.com/subject/rjeecxtx.html