2012-05-02 12 views

cevap

7

Bu kod snippet'inin gerçekleştirdiği gerçek eylem oldukça önemlidir. Animasyon bir görünümden diğerine geçiyor - ilk değiştiriliyor ve ardından hangisinin daha önce görüntülendiğini izlemek için bir boole ayarlanır. Boole tamamlama blokunda ayarlanır. Bu durumda

[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView) 
    toView:(displayingPrimary ? secondaryView : primaryView) 
    duration:1.0 
    options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight : 
       UIViewAnimationOptionTransitionFlipFromLeft) 
    completion:^(BOOL finished) { 
     if (finished) { 
      displayingPrimary = !displayingPrimary; 
     } 
}]; 

, animasyon (herhangi bir nedenle) eksiksiz, daha sonra fikir alışverişinde edilmemiş etmez ve kesinlikle displayingPrimary değerini çevirmek istemiyoruz, çünkü sen' eğer Daha sonra durumunuzun hatalı bir kaydını tutacağım. Bu nedenle, bu durumda finished bayrağının işaretlendi.

Bu kılavuzdaki diğer kod örneklerinin çoğunda (tümü olmasa bile) işaretin işaretli olmadığına dikkat edin; çünkü bu durumlarda önemli değildir çünkü (örneğin, ilk önce başka bir animasyonun çalıştırılması, örn. 'un içermediği bazı değerler, animasyonun başarılı bir şekilde tamamlanmasına bağlıdır).

+2

bu yüzden tamamlanma bloğu gibi bitebilir, bool bitmiş olsa bile gerçekte çalışabilir. bu neden olur? Bir "tamamlama" bloğu olduğu için, sadece önceki blok gerçekten tamamlanmışsa koşmazdı. – johnbakers

+1

Bu yöntemlerden biriyle yeni bir animasyon başlatırken, yenisinin ilkini kesmesi için bir seçenek var. Ayrıca, kullanıcı görüşüyle ​​etkileşime izin verme seçeneği de vardır; bu, animasyonu iptal etme fırsatı sunabilir. –

+0

Dokümana göre, geçişiFromView, animasyonu BAŞLANGIÇ'taki görünüme ekleyin ve animasyonun SONRASINDAN süperGörüntüden çıksın. Bu, bittiğinde BOWH fromView'den false ve toView hala var mı demek oluyor? Çünkü benim durumumda, her ikisinin de gittiği vakaları gördüm. –

3

Evet, gerçekten işleyicinizde bu boolü onurlandırmalısınız. Kullanıcı animasyonu başlatabilir, ancak bu animasyon normal olarak tamamlanmadan önce kullanıcı bunu erken iptal etmek için başka bir şey yapar. Bu bool, bu tür vakaları bilmenizi sağlar.

- güncelleştirme - Sadece detaylandırmak için. Ekran boyunca bir görüntüyü hareket ettiren bazı animasyonlar hayal edin. Görünüm hareket ettirildiğinde işleyici yanabilir. Kullanıcının, devam etmekte olan ilkini esasen iptal eden yeni bir animasyona neden olmak için başka bir yere temas ettiğini varsayalım. Bunu tespit etmek için sağlanan boole kullanabilirsiniz.

+0

Animasyon iptal edilmiş olsa bile tamamlama işleyicisi hala çalışmaya devam edebilir mi? – johnbakers

+0

İnşallah birileri benim kim olduğumdan daha emin kim olacak, ama evet, bu durumda olduğunu düşünüyorum. Hiç çalışmadan önce iptal edilmez, ancak tamamlanmadan önce kesilir. –

+0

Tamamlama bloğu yalnızca bir anlama sahiptir ve bunu yalnızca, animasyonun başarıyla tamamlanmasından sonra belirli bir şey yapmanız gerektiğinde doğrulamanız ve kullanmanız gerekir. Animasyon ile ne olduğunu umursamıyorsanız, animasyonun başarıyla tamamlanıp tamamlanmadığını doğrulamak için bir nokta yoktur ... – Lefteris

İlgili konular