CATiledLayer的使用

效果圖.png

使用CATiledLayer解決加載大圖的問題。如:地圖

class ViewController: UIViewController, CALayerDelegate, UIScrollViewDelegate {
    
    var contentView:UIView?
    
    @IBOutlet weak var scrollView: UIScrollView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let rect = CGRect(x: 0, y: 0, width: 1280, height: 960)
        
        let contentView = UIView(frame: rect)
        //瓦片
        let tiledLayer = CATiledLayer()
        tiledLayer.frame = rect
        tiledLayer.delegate = self
        contentView.layer.addSublayer(tiledLayer)
        scrollView.addSubview(contentView)
        scrollView.contentSize = contentView.frame.size
        //draw layer
        tiledLayer.setNeedsDisplay()
        self.contentView = contentView
    }
    
    func draw(_ layer: CALayer, in ctx: CGContext) {
        let layer = layer as! CATiledLayer
        
        //配置瓦片位置
        let bounds = ctx.boundingBoxOfClipPath
        let x = bounds.origin.x / layer.tileSize.width
        let y = bounds.origin.y / layer.tileSize.height
        
        //加載瓦片圖片
        let imageName = "LiuYan_0\(Int(x))_0\(Int(y))"http://大圖切成的小圖
        let tileImage = UIImage(named: imageName)
        
        //draw tile
        UIGraphicsPushContext(ctx)
        tileImage?.draw(in: bounds)
        UIGraphicsPopContext()
    }
    
    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return self.contentView
    }
}

Github地址: https://github.com/LJjack/LearnCATiledLayer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容