İçeriğe geç

UIKit Dynamics animasyonları

İOS

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.

Tarih:iOSSwift

Tek Yorum

  1. John John

    Thanks good code

Bu yazı yorumlara kapalı, ama geri izlemeler ve pingback'ler açık.

Copyright © 2020 Kenan Atmaca