美文网首页
CALayer解析2:CAScrollLayer

CALayer解析2:CAScrollLayer

作者: 狂奔的胖蜗牛 | 来源:发表于2017-08-25 10:32 被阅读233次

1.简介

CAScrollLayer是CALayer的子类,显示的是可滚动的图层的一部分,UIScrollView自带了该图层。该层不能直接响应用户的触摸,也不会去检查可滚动的区域,UIScrollView限制了其CAScrollLayer的滚动区域。

可以使CAScrollLayer滚动模式为水平或者垂直,还可以指定滚动到特定的地点。

2.使用

我们自定义一个可以随便滚动的ScrollView来说明。

//首先,创建出自定义的ScrollView
import UIKit

class CustomScrollView: UIView {

    //重写该属性,作用是让原来的layer变成CAScrollLayer
    override class var layerClass : AnyClass {
        return CAScrollLayer.self
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        //设置scrollView的layer的滚动模式
        (layer as! CAScrollLayer).scrollMode = kCAScrollBoth
        let pan = UIPanGestureRecognizer(target: self, action: #selector(pan(pan:)))
        addGestureRecognizer(pan)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func pan(pan: UIPanGestureRecognizer) {
        var newPoint = bounds.origin
        newPoint.x -= pan.translation(in: self).x
        newPoint.y -= pan.translation(in: self).y
        pan.setTranslation(CGPoint.zero, in: self)
        (layer as! CAScrollLayer).scroll(to: newPoint)
    }

}

使用方式如下:

import UIKit

class ViewController: UIViewController {
    
    
    var scrollView: CustomScrollView!
    

    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView = CustomScrollView(frame: CGRect(x: view.frame.width/2-100, y: 100, width: 200, height: 200))
        
        let image = UIImageView(frame: scrollView.bounds)
        image.image = UIImage(named: "111.jpg")
        image.contentMode = .center
        
        scrollView.addSubview(image)
        view.addSubview(scrollView)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
}

最终,这样就自定义出一个可以随便滚动的scrollView。

2017-08-25 10_24_27.gif

3.结论

  • 1.如果只需要一些很简单的很轻量级的东西,可以考虑使用
  • 2.如果需要更加复杂的滚动效果,应该使用UIScrollView
  • 3.如果滚动非常大的图像,应该考虑使用CATiledLayer

相关文章

  • CALayer解析2:CAScrollLayer

    1.简介 CAScrollLayer是CALayer的子类,显示的是可滚动的图层的一部分,UIScrollView...

  • Calayer

    示例 #1:CALayer 示例 #2:CAScrollLayer 示例 #3:CATextLayer 示例 #4...

  • CALayer CAScrollLayer CATextLaye

    CALayer Layer的基本属性: Layers像Views有subviews一样,也有sublayers;当...

  • CALayer 和 UIView的区别和联系

    详解CALayer 和 UIView的区别和联系 IOS开发-CALayer和UIView详细汇总 [你给我解析清...

  • CAScrollLayer

    原文 If you’re going to be moving a layer’s bounds origin a...

  • CALayer 简介

    CALayer1-简介CALayer2-创建新的层 CALayer3-层的属性 CALayer4-自定义层 CAL...

  • CALyer介绍

    CALayer1-简介CALayer2-创建新的层CALayer3-层的属性CALayer4-自定义层 注意点 第...

  • Core Animation

    1 UIView与 CALayer是平行的,图层概念 2 CALayer可以直接显示图片,给CALayer的属性c...

  • CALayer解析4:AVPlayerLayer

    1.简介 AVPlayerLayer是AVFoundation的底层图层。拥有AVPlayer属性,可以播放媒体文...

  • CALayer解析6:CAReplicatorLayer

    1.简介 CAReplicatorLayer能够创建出指定个数的子layer的复制layer,并且根据给出的位移、...

网友评论

      本文标题:CALayer解析2:CAScrollLayer

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