Animasyon ve Zamanlama Sistemine Genel Bakış

Bu konuda, zamanlama sisteminin özelliklere animasyon eklemek için animasyonu, Timelineve Clock sınıflarını nasıl kullandığı açıklanmaktadır.

Ön koşullar

Bu konuyu anlamak için, Animasyona Genel Bakış'ta açıklandığı gibi özelliklere animasyon eklemek için WPF animasyonlarını kullanabilmeniz gerekir. Ayrıca bağımlılık özellikleri hakkında bilgi sahibi olmanıza yardımcı olur; Daha fazla bilgi için bkz. Bağımlılık Özelliklerine Genel Bakış.

Zaman Çizelgeleri ve Saatler

Animasyona Genel Bakış , bir Timeline zaman segmentini nasıl temsil ettiğini ve animasyonun Timeline çıkış değerleri üreten bir tür olduğunu açıklar. Kendi başına, bir Timeline, yalnızca bir zaman dilimini tanımlamaktan başka bir şey yapmaz. Gerçek işi zaman çizelgesinin Clock nesnesi yapar. Benzer şekilde, animasyon aslında özelliklere animasyon eklemez: Animasyon sınıfı çıkış değerlerinin nasıl hesaplanması gerektiğini açıklar, ancak Clock animasyon çıktısını yönlendiren ve özelliklere uygulayan animasyon için oluşturulan sınıftır.

A Clock , için Timelinezamanlamayla ilgili çalışma zamanı durumunu koruyan özel bir nesne türüdür. Animasyon ve zamanlama sistemi için temel olan üç bit bilgi sağlar: CurrentTime, CurrentProgressve CurrentState. , Clock vb. tarafından RepeatBehaviorTimelineDurationAutoReverseaçıklanan zamanlama davranışlarını kullanarak geçerli saatini, ilerleme durumunu ve durumunu belirler.

Çoğu durumda, zaman çizelgeniz için otomatik olarak bir Clock oluşturulur. veya StoryboardBeginAnimation yöntemini kullanarak animasyon eklediğinizde, zaman çizelgeleriniz ve animasyonlarınız için otomatik olarak saatler oluşturulur ve hedeflenen özelliklerine uygulanır. Ayrıca, yöntemini kullanarak CreateClock açıkça bir Clock oluşturabilirsinizTimeline. yöntemi, MediaTimeline.CreateClock çağrıldığı için uygun türde Timeline bir saat oluşturur. Timeline alt zaman çizelgeleri içeriyorsa, onlar için de nesneler oluştururClock. Sonuçta elde edilen Clock nesneler, oluşturuldukları nesne ağacının Timeline yapısıyla eşleşen ağaçlar halinde düzenlenir.

Farklı zaman çizelgesi türleri için farklı saat türleri vardır. Aşağıdaki tabloda, farklı Timeline türlerden bazılarına karşılık gelen türler gösterilmektedirClock.

Zaman çizelgesi türü Saat türü Saat amacı
Animasyon (öğesinden AnimationTimelinedevralır) AnimationClock Bağımlılık özelliği için çıkış değerleri oluşturur.
MediaTimeline MediaClock Medya dosyasını işler.
ParallelTimeline ClockGroup Alt Clock nesnelerini gruplandırma ve denetleme
Storyboard ClockGroup Alt Clock nesnelerini gruplandırma ve denetleme

Oluşturduğunuz tüm AnimationClock nesneleri yöntemini kullanarak uyumlu bağımlılık özelliklerine ApplyAnimationClock uygulayabilirsiniz.

Çok sayıda benzer nesnenin animasyonu gibi yoğun performans gerektiren senaryolarda kendi Clock kullanımınızı yönetmek performans avantajları sağlayabilir.

Saatler ve Zaman Yöneticisi

WPF'de nesnelere animasyon eklediğinizde, zaman çizelgeleriniz için oluşturulan nesneleri yöneten Clock zaman yöneticisidir. Zaman yöneticisi bir nesne ağacının Clock köküdür ve bu ağaçtaki zaman akışını denetler. Her WPF uygulaması için otomatik olarak bir zaman yöneticisi oluşturulur ve uygulama geliştiricisi tarafından görünmez. Zaman yöneticisi saniyede birçok kez "tıklar"; her saniye gerçekleşen gerçek değer sayısı, kullanılabilir sistem kaynaklarına bağlı olarak değişir. Bu değer işaretlerinin her biri sırasında, zaman yöneticisi zamanlama ağacındaki tüm ActiveClock nesnelerin durumunu hesaplar.

Aşağıdaki çizimde zaman yöneticisi ve AnimationClockile ile animasyonlu bağımlılık özelliği arasındaki ilişki gösterilmektedir.

Timing system components and the time manager.
Özellik animasyonu oluşturma

Zaman yöneticisi işaretlendiğinde, uygulamadaki her ActiveClock birinin zamanını güncelleştirir. Clock iseAnimationClock, geçerli çıkış değerini hesaplamak için oluşturulduğu yöntemini AnimationTimeline kullanırGetCurrentValue. AnimationTimeline geçerli AnimationClock yerel saati, genellikle özelliğin temel değeri olan bir giriş değeri ve varsayılan hedef değeri ile sağlar. yöntemini veya CLR erişimcisini kullanarak bir animasyonlu özelliğinin GetValue değerini aldığınızda, öğesinin çıkışını AnimationClockalırsınız.

Saat Grupları

Önceki bölümde, farklı zaman çizelgesi türleri Clock için farklı nesne türlerinin nasıl olduğu açıklanmıştır. Aşağıdaki çizimde zaman yöneticisi, bir , bir ClockGroupAnimationClockve animasyonlu bağımlılık özelliği arasındaki ilişki gösterilmektedir. , ClockGroup animasyonları ve diğer zaman çizelgelerini gruplandıran sınıfı gibi Storyboard diğer zaman çizelgelerini gruplandıran zaman çizelgeleri için oluşturulur.

Timing system components with the time manager and dependency properties.
Bir ClockGroup

Oluşturma

Birden çok saati tek bir özellik ile ilişkilendirmek mümkündür; bu durumda her saat, temel değeri olarak önceki saatin çıkış değerini kullanır. Aşağıdaki çizimde aynı özelliğe uygulanan üç AnimationClock nesne gösterilmektedir. Saat1 giriş olarak animasyonlu özelliğin temel değerini kullanır ve çıkış oluşturmak için bunu kullanır. Clock2, giriş olarak Clock1'den çıkışı alır ve çıkış oluşturmak için kullanır. Clock3, giriş olarak Clock2'den çıkışı alır ve çıkış oluşturmak için kullanır. Aynı özelliği aynı anda birden çok saat etkilediğinde, bir bileşim zincirinde oldukları söylenir.

Timing system components composed with multiple dependency properties.
Bir kompozisyon zinciri

Oluşturma zincirindeki nesnelerin girişi ve çıkışı arasında bir ilişki oluşturulsa da, zamanlama davranışlarının AnimationClock etkilenmediğini; Clock nesnelerin (nesneler dahil AnimationClock ) üst Clock nesnelerine hiyerarşik bir bağımlılığı olduğunu unutmayın.

Aynı özelliğe birden çok saat uygulamak için , ComposeHandoffBehavior animasyonu veya AnimationClockuygularken Storyboardkullanın.

Onay İşaretleri ve Olay Birleştirme

Çıkış değerlerini hesaplamaya ek olarak, zaman yöneticisi her iş yaptığı zaman başka işler yapar: her saatin durumunu belirler ve olayları uygun şekilde oluşturur.

Keneler sık sık gerçekleşirken, keneler arasında birçok şeyin gerçekleşmesi mümkündür. Örneğin, bir Clock durdurulabilir, başlatılabilir ve yeniden durdurulabilir ve bu durumda CurrentState değeri üç kez değişmiş olur. Teoride CurrentStateInvalidated , olay tek bir kene içinde birden çok kez tetiklenebilir; ancak zamanlama altyapısı olayları birleştirir, böylece CurrentStateInvalidated olay her kene için en fazla bir kez tetiklenebilir. Bu, tüm zamanlama olayları için geçerlidir: belirli Clock bir nesne için her türden en fazla bir olay oluşturulur.

Bir Clock durum değiştirdiğinde ve keneler arasında özgün durumuna geri döndüğünde (örneğin, ile geri arasında Activegeçiş ActiveStopped), ilişkili olay yine gerçekleşir.

Zamanlama olayları hakkında daha fazla bilgi için bkz. Zamanlama Olaylarına Genel Bakış.

Özelliklerin Geçerli Değerleri ve Temel Değerleri

Bir animatable özelliği iki değere sahip olabilir: temel değer ve geçerli değer. CLR erişimcisini veya yöntemini kullanarak özelliği ayarladığınızda SetValue , temel değerini ayarlarsınız. Bir özellik animasyonlu olmadığında, temel ve geçerli değerleri aynıdır.

Bir özelliğe animasyon eklediğinizde, AnimationClock özelliğin geçerli değerini ayarlar. ÖZELLIĞIn değerini CLR erişimcisi veya GetValue yöntemi aracılığıyla almak, veya Fillingolduğunda değerinin AnimationClock çıkışını AnimationClockActive döndürür. yöntemini kullanarak GetAnimationBaseValue özelliğin temel değerini alabilirsiniz.

Ayrıca bkz.