İçeriğe geç

CADisplayLink kullanımı

İOS 10

Merhabalar bu yazımda hazırlandığınız İOS animasyonlarında sürekli olarak renderlamak istediğinizde size bu performansı veren animasyon timer‘ı CADisplayLink nasıl kullanılır örneğini vereceğim.

Animasyon ve layer işlemlerinde direk CoreGraphics katmanında çalışan seri CA sınıflarını biliyoruz ve oldukça işlevsel kullanıma sahipler.(CABasicAnimation,CAKeyFrameAnimation vs)

Animasyon işlemlerinize yardımcı olacak diğer bir sınıfta CADisplayLink‘tir. Bu sınıf sayesinde timer oluşturup sürekli olarak fonksiyon içinde işlemler yapabilirsiniz. Ancak Timer() sınıfından farkı CoreGraphics yapısı için efektiv olması, normal işlemler için kullanımı oldukça gereksiz olacaktır.

Aşağıda verdiğim örneği inceleyebilirsiniz.

   lazy var displayLink:CADisplayLink = {
        
        let displayLink = CADisplayLink(target: self, selector: #selector(update))
        displayLink.add(to: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
   
        return displayLink
        
    }()

displayLink adında CADisplayLink nesnesi döndüren bir değişken oluşturdum.

    var pointX:CGFloat = 30
    var shapeRect:CAShapeLayer!

override func viewDidLoad() {
        super.viewDidLoad()
       
       displayLink.isPaused = true
        
    }

 func update() {
        print("updateee!")
    
        self.pointX += 2
        shapeRect.position = CGPoint(x: self.pointX, y: 30)
    }
    
    
    func addShape() {
        
        let bpath = UIBezierPath(rect: CGRect(x: 30, y: 30, width: 40, height: 40))
        
        shapeRect = CAShapeLayer()
        shapeRect.path = bpath.cgPath
        shapeRect.fillColor = UIColor.orange.cgColor
    
        view.layer.addSublayer(shapeRect)
    
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touch")
        
        addShape()
        displayLink.isPaused = false

    }

Pozisyonunu CADisplayLink sayesinde sürekli olarak yenilediğim bir kutu nesnesini x ekseninde kaydırma işlemi gerçekleştirdim.

  • .isPaused -> Durdurma işlemi.
  • .frameInterval -> Yenileme süresini ayarlama.
  • .invalidate() -> Tüm timer işlemlerini iptal etme,durdurma.
Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca