Merhabalar bu yazımda İOS programlamada UIKit‘in içerisinde bulunan Fizik animasyonlarını nasıl kullanırız buna örnek vereceğim.
Bu animasyonlar görselliği bol menu,tutorialler hazırlamanıza yardımcı olacaktır. Tüm UI elementlerine bu özellikleri ekleyebilirsiniz.
Dynamic Behavior’ların ne işe yaradığından bahsedeyim:
- UIGravityBehavior = Belirtilen View’e yer çekimi olayı ekler.
UICollisionBehavior = Cisimlere veya View’e zemin ekler.
UIDynamicItemBehavior = Cisimlere fiziksel özellikler eklenmesini sağlar.(esneklik,ağırlık,sürtünme vs)
UIPushBehavior = Belirtilen Cisimleri belirli açıyla fırlatma işlemi yapar.
UISnapBehavior = Belirtilen Cisimleri esnek bir kaydırma şeklinde x,y kordinatlarına gönderir.
UIAttachmentBehavior = Belirtilen Cismi ipe bağlıymış gibi x,y kordinatlarında salınım yaptırır.
Aşağıda verdiğim örnekte kullanım şekillerini görebilirsiniz bir adet oval UIView nesnesi üzerinde bu işlemleri gerçekleştirdim.
import UIKit class ViewController: UIViewController { var box:UIView! var animator:UIDynamicAnimator! override func viewDidLoad() { super.viewDidLoad() box = UIView(frame: CGRect(x: view.frame.size.width / 2, y: view.frame.size.height / 2, width: 100.0, height: 100.0)) box.backgroundColor = UIColor.orangeColor() box.layer.cornerRadius = box.frame.width / 2 box.clipsToBounds = true self.view.addSubview(box) animator = UIDynamicAnimator(referenceView: self.view) let gasture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.pan(_:))) self.view.addGestureRecognizer(gasture) } func pan(sender: UIGestureRecognizer) { if sender.state == .Began || sender.state == .Cancelled { animator.removeAllBehaviors() } if sender.state == .Changed { box.center = sender.locationInView(self.view) } if sender.state == .Ended { showAnimate() } } func showAnimate(){ let gravityB = UIGravityBehavior(items: [box!]) gravityB.gravityDirection = CGVectorMake(0.0, 0.7) let colision = UICollisionBehavior(items: [box!]) colision.collisionMode = .Everything colision.translatesReferenceBoundsIntoBoundary = true let dynamicitem = UIDynamicItemBehavior(items: [box!]) dynamicitem.elasticity = 0.80 dynamicitem.resistance = 0.3 dynamicitem.angularResistance = 0.3 dynamicitem.friction = 0.3 dynamicitem.density = 5 let pushB = UIPushBehavior(items: [box!], mode: UIPushBehaviorMode.Instantaneous) pushB.magnitude = 25 pushB.angle = 180 pushB.active = true let snapB = UISnapBehavior(item: box!, snapToPoint: CGPoint(x: view.frame.size.width, y: box.center.y)) snapB.damping = 0.5 let attachmentB = UIAttachmentBehavior(item: box!, attachedToAnchor: CGPoint(x: 0, y: 0)) attachmentB.length = 120 attachmentB.damping = 0.3 attachmentB.frequency = 0.30 // animator.addBehavior(attachmentB) // animator.addBehavior(pushB) animator.addBehavior(snapB) // animator.addBehavior(dynamicitem) // animator.addBehavior(gravityB) animator.addBehavior(colision) } }
Olayları bir adet UIDynamicAnimator yaratıp özellikleri ona ekleyerek gerçekleştiriyoruz.
Thanks good code