İçeriğe geç

CoreGraphics ile CATransform3D kullanımı

İOS

Merhabalar bu yazımda CoreGraphics kütüphanesi ile nasıl 3 boyutlu animasyonlar hazırlarız bunun için kullanılan CATransform3D sınıfına örnek vereceğim.

CGAffineTransform sınıfıyla (x,y) üzerinden 2D transform işlemlerini kolaylıkla sağlayabiliyoruz. 3D işlemler için ise (x,y,z) işlemlerini direk katman üzerinden işlem yapan CATransform3D sınıfıyla hallediyoruz.

Bu özellikleri tüm nesneler üzerinde kullanabilir. Efektli butonlar, sayfalar arası geçiş transitionların’da view üzerinde işlem yapmak için kullanabilirsiniz.

Aşağıdaki verdiğim ilk örnekte kutumuzu yaratıp 2D işlem ile Scale işlemi yapan ardından core animasyonu kullanarak 3D işlem yapan kod parçalarını görebilirsiniz.

 box = UIView(frame: CGRect(x: 100, y: self.view.frame.size.height / 2 - 100, width: 100, height: 100))
        box.backgroundColor = UIColor.orangeColor()
        box.layer.shadowColor = UIColor.blackColor().CGColor
        box.layer.shadowOffset = CGSize(width: 5, height: 5)
        box.layer.shadowOpacity = 0.7
        self.view.addSubview(box)

2D:

  let trans = CGAffineTransformIdentity
        let transRotate = CGAffineTransformScale(trans, 2.0, 2.0)
        
      UIView.animateWithDuration(1.5, animations: { 
        self.box.transform = transRotate
        }) { (_) in
            UIView.animateWithDuration(1.5, animations: { 
                self.box.transform = trans
            })
        }

3D:

 var trid = CATransform3DIdentity
        trid.m34 = 1.0 / -500.0 // perspektif
     
        let trscale = CATransform3DScale(trid, 2, 2, 0)
        var toTrans = CATransform3DRotate(trid, CGFloat(M_PI_2) * 2, 0, 1, 0)
        let fromTrans = CATransform3DRotate(trid, CGFloat(M_PI_2), 0, 1, 0)
        
        toTrans = CATransform3DConcat(toTrans, trscale)
        
        let ani = CABasicAnimation(keyPath: "transform")
        ani.fromValue = NSValue(CATransform3D: fromTrans);
        ani.toValue = NSValue(CATransform3D: toTrans)
        ani.duration = 1.0
        ani.fillMode = kCAFillModeForwards
        ani.autoreverses = true
        ani.removedOnCompletion = false
        ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        ani.delegate = self
        box.layer.addAnimation(ani, forKey: nil)

 

Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca