UIDynamicAnimator ile Dinamik Animasyonlar Hazırlamak

Ata Etgi
Kodluyoruz
Published in
3 min readMay 30, 2021

Merhabalar, bu yazıda sizlere aklınıza gelebilecek tüm animasyonları UIKit ile yapmamıza olanak sağlayan UIDynamicAnimator’den bahsetmek istiyorum.

UIKit kullandığımız her yerde erişebildiğimiz UIDynamicAnimator, view objelerimize yer çekimi, çarpışma ve birbirine bağlanma gibi animasyonları son derece gerçekçi fiziklerle birlikte eklemize yardımcı olan bir sınıftır.

Kullanabileceğimiz animasyon ve davranış biçimleri şu şekildedir:

  • UIGravityBehavior – Yerçekimi davranışı eklemizi sağlar.
  • UICollisionBehavior – Çarpışmalar eklemizi sağlar.
  • UISnapBehavior – Objemizin bir noktaya bağlıymış gibi hareketine yardımcı olur.
  • UIAttachmentBehavior – İki obje arasında bir dinamik bağlantı kurmamızı sağlar.
  • UIPushBehavior – Objelerimizin belirleyeceğimiz kuvvet ve açıya göre hareketini sağlar.

Bu davranışları view objelerimize ekleyebilmek için önce davranışa ait sınıftan bir obje üretir ve hangi view objelerimizin bu davranışa sahip olacağını belirleriz. Davranışa ait istediğimiz düzenlemeleri(yer çekimi kuvveti, hız, açı gibi) bitirdikten sonra tüm oluşturduğumuz davranışları UIDynamicAnimator’a ekliyoruz. UIDynamicAnimator burada bize tüm bu davranışları kullanabilmemiz için bir bağlam görevi görüyor.

Genel olarak neler yapabileceğimizden bahsettiğimize göre ufak bir örnekle bu davranışları nasıl kullanabiliriz onu göstermek istiyorum.

Yerçekimi ve Çarpışma Eklemek

Önce view’ımıza nasıl yerçekimi kuvveti ekleyebiliriz ondan başlayalım. Yer çekimi kuvvetini oluşturabilmek için UIGravityBehavior sınıfını kullanacağız.

Animator ve gravity instancelarımızı, ardından daUITapGestureRecognizer ‘ımızı view controllerımıza tanımlayarak başlıyoruz.

handleTap isimli fonksiyonumuzu daha oluşturmadığımız için xCode bize uyarı veriyor, hemen onuda oluşturuyoruz.

Bu fonksiyonda her dokunduğumuz noktada bir adet 100x100 kırmızı bir daire oluşturulmasını ve bu daireyi degravity instance’ımıza ekleyerek artık yerçekimi özelliğine sahip olmasını sağlıyoruz.

Instancelarımızı tanımlamıştık ancak daha oluşturmadık. Şimdi viewDidLoad içerisinde onlarıda oluşturalım.

Evet yerçekimi eklemek bu kadar basit! Varsayılan olarak aşağı doğru bir yerçekimi kuvveti olsada UIGravityBehavior ‘ın özellikleriyle oynarak daha farklı davranış biçimleri elde edebilirsiniz.

Yerçekimini ekledik ancak sınır eklemediğimiz için viewlarımız ekranın dışına doğru çıkıyor. Şimdi sadece bi kaç satır kodla birlikte view’ımızın içide kalmasını sağlayacağız. Bunun için UICollisionBehavior sınıfını kullanıcaz.

Önce controllerımıza instance’ımızı ekleyerek başlıyoruz.

Ardından viewDidLoad methodumuza aşağıdaki satırları ekliyoruz.

Burada önce collision nesnemizi oluşturuyoruz ve ardından translatesReferenceBoundsIntoBoundary özelliğini aktif ederek çarpışma davranışının sınırlarını başta UIDynamicAnimator oluştururken verdiğimiz referenceView olmasını sağlıyoruz.

Son olarak hangi view’ımızın collision efektine sahip olacağını daha söylemedik hemen onuda handleTap fonksiyonumuzda en alta ekleyelim:

Evet yapacaklarımız bu kadardı, ek dokunduğumuzda rastgele renklerde yuvarlaklar oluşması için createCircle fonksiyonumuza ufak bir ekleme yapıyoruz ve controllerımız en son bu şekilde görünmesi gerekiyor:

UIDynamicAnimator ‘le yapabilecekleriniz sınırsız ve tamemen hayal gücünüze kalmış durumda daha fazlası için aşağıdaki Apple dökümanın inceleyebilirsiniz, umarım yararlı olmuştur.

--

--