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。

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