2012-09-29 15 views
12

Hücreleri bir daireye yerleştiren alt sınıfım var. düzeni, shouldInvalidateLayoutForBoundsChange: numaralı çağrı için YES değerini döndürür. rotasyon ise, ilk pozisyonda hücre söner, son pozisyonunda hücre içinde kaybolur.UICollectionView/UICollectionViewLayout döndürme veya sınır değişikliklerinde çapraz boşlukları devre dışı bırakmanın en iyi yolu nedir?

Ben soldurmaları devre dışı olabilir ve öğeleri daire basitçe görünüyor benim düzeni için aşağıdaki kodu ekleyerek oryantasyon değişikliği ile döndürmek:

dokümantasyon değil çünkü yöntemleri sınırları değişikliği denilen olsun Neden
- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    return nil; 
} 

- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    return [self layoutAttributesForItemAtIndexPath:itemIndexPath]; 
} 

yaptıkları önermek görünüyor? Dokümantasyon, koleksiyon görünümünden öğelerin eklenmesi ve kaldırılması için ilgili ile arandığını belirtir.

Dönüş sırasında çapraz solmayı devre dışı bırakmanın daha iyi bir yolu var mı?

Notlar:

  • initialLayoutAttributesForAppearingItemAtIndexPath: dokümantasyon varsayılan olarak yöntem nil döndürür ama super olmayan nil değerlerini iade çağrılarını devletler.
  • Ben UICollectionView yöntemlerine deleteItemsAtIndexPaths:, moveItemAtIndexPath:toIndexPath: ve insertItemsAtIndexPaths: üzerinde sembolik sonları noktalarını ayarlayabilir ve bunların hiçbiri dönüşü sırasında vuruluyor.
+0

Bu yalnızca karanlıkta bir çekimdir, ancak döndürme animasyonunun devre dışı bırakılması için, çekirdek animasyonunu tamamen döndürme işlemi için kapatabilirsiniz: [CATransaction begin]; [CATransaction kümesiValue: (id) kCFBoolFolse forKey: kCATransactionDisableActions]; // rotasyonunuzu yapın [CATransaction commit]; – maz

+0

Belki, bir sınır üzerinde dahili olarak öğeleri kaldırılır ve eklenir ve sonuç olarak, yöntemler denir. Neden -deleteItemsAtIndexPaths: ve -insertItemsAtIndexPaths: neden çağrılmaya gelince .. burada hiçbir ipucu. Belki UIKit programcısı aleti uygulamak ve silmek için API'yi aldattı ve önledi? Eşi görülmemiş değil. – maz

+1

Görüntünün arka katmanındaki örtük animasyonları burada açıkladığım gibi kullanarak devre dışı bırakabilir misiniz: http://stackoverflow.com/questions/2244147/disabling-implicit-animations-in-calayer-setneedsdisplayinrect/2244734#2244734? –

cevap

10

UICollectionViewLayout.h dosya devletler açıkça sınırları değişiklikleri denir diyor

// This set of methods is called when the collection view undergoes an 
    animated transition such as a batch update block or an animated 
    bounds change. 
// For each element on screen before the invalidation, 
    finalLayoutAttributesForDisappearingXXX will be called and an 
    animation setup from what is on screen to those final attributes. 
// For each element on screen after the invalidation, 
    initialLayoutAttributesForAppearingXXX will be called an an 
    animation setup from those initial attributes to what ends up on 
    screen. 

. Çıkarma/ekleme yerine "eski durum" ve "yeni durum" daha doğru görünüyor.

İlgili konular