UİCollectionView etkili sürükle ve bırak
Şu anda UİTableView yeniden davranış kullanarak UİCollectionView kullanmaya çalışıyorum.
ArayalımUİtableView TVve birUİCollectionView CV(aşağıdaki açıklama açıklığa kavuşturmak için)
Temelde TV sürükle ve bırak çoğaltmak için çalışıyorum, ama düzen modunda, hücre anda uzun basın olarak hareket etmeye hazır olduğunu jest tetiklenir kullanıyorum. Prefectly çalışır, hareket CV yöntemi kullanıyorum, bir sorun yok.
Ben kullanıcı bir hücreyi sürüklerken, kaydırma işlemek için CV contentOffset özelliği güncelleştirin. Bir kullanıcı üstünde ve altında belirli bir rect gittiğinde, ben contentOffset güncelleme ve CV ilerleyin. Sorun kullanıcı parmağını hareket durduğunda, hareketi herhangi bir güncelleme göndermez kaydırma durdurun ve tekrar kullanıcı parmağını hareket olarak yapar.
Bu davranış kesinlikle doğal değil, kullanıcı televizyonda olduğu gibi CV bırakana kadar ilerleyin continu tercih ederim. TV sürükle ve bırak deneyimi harika ve gerçekten aynı duygu yeniden istiyorum. Herkes yeniden düzenleme sırasında TV kaydırma nasıl biliyor mu ?
- Kaydırma eylemi tetiklemek için bir zamanlayıcı kullanarak sürekli hareket pozisyonu doğru yerde olduğu sürece çalıştım, kaydırma berbat ve çok verimli (çok yavaş ve ürkek).
- Ben de GCD başka bir konuya jest pozisyonu dinlemek için kullanmayı denedim ama sonuç daha kötü olur.
Eğer birisi cevap varsa onunla evlenmek istiyorum ... bu konuda fikir kalmadı,!
Burada longPress yöntemi uygulanması:
- (void)handleLongPress:(UILongPressGestureRecognizer *)sender
{
ReorganizableCVCLayout *layout = (ReorganizableCVCLayout *)self.collectionView.collectionViewLayout;
CGPoint gesturePosition = [sender locationInView:self.collectionView];
NSIndexPath *selectedIndexPath = [self.collectionView indexPathForItemAtPoint:gesturePosition];
if (sender.state == UIGestureRecognizerStateBegan)
{
layout.selectedItem = selectedIndexPath;
layout.gesturePoint = gesturePosition; // Setting gesturePoint invalidate layout
}
else if (sender.state == UIGestureRecognizerStateChanged)
{
layout.gesturePoint = gesturePosition; // Setting gesturePoint invalidate layout
[self swapCellAtPoint:gesturePosition];
[self manageScrollWithReferencePoint:gesturePosition];
}
else
{
[self.collectionView performBatchUpdates:^
{
layout.selectedItem = nil;
layout.gesturePoint = CGPointZero; // Setting gesturePoint invalidate layout
} completion:^(BOOL completion){[self.collectionView reloadData];}];
}
}
CV kaydırma yapmak için bu yöntemi kullanıyorum:
- (void)manageScrollWithReferencePoint:(CGPoint)gesturePoint
{
ReorganizableCVCLayout *layout = (ReorganizableCVCLayout *)self.collectionView.collectionViewLayout;
CGFloat topScrollLimit = self.collectionView.contentOffset.y layout.itemSize.height/2 SCROLL_BORDER;
CGFloat bottomScrollLimit = self.collectionView.contentOffset.y self.collectionView.frame.size.height-layout.itemSize.height/2-SCROLL_BORDER;
CGPoint contentOffset = self.collectionView.contentOffset;
if (gesturePoint.y < topScrollLimit && gesturePoint.y - layout.itemSize.height/2 - SCROLL_BORDER > 0)
contentOffset.y -= SCROLL_STEP;
else if (gesturePoint.y > bottomScrollLimit &&
gesturePoint.y layout.itemSize.height/2 SCROLL_BORDER < self.collectionView.contentSize.height)
contentOffset.y = SCROLL_STEP;
[self.collectionView setContentOffset:contentOffset];
}
CEVAP
İşte bir alternatif:
https://github.com/lukescott/DraggableCollectionView
DraggableCollectionView ve LXReorderableCollectionViewFlowLayout arasındaki farklar:
- Veri kaynağı sadece bir kez değiştirilir. Bu kullanıcı bir öğeyi iken, hücreleri yeniden konumlandırılmış veri kaynağını değiştirmeden olduğu anlamına gelir.
- Mümkün özel düzenleri ile kullanmak için yapar böyle bir şekilde yazılmış.
- Düzgün kaydırma ve animasyon için
CADisplayLink
kullanır. - Animasyonlar daha az sıklıkta sürüklerken iptal edildi. Daha fazla hissettiriyor"". doğal
- Protokol yöntemleri
UITableViewDataSource
benzerUICollectionViewDataSource
uzanır.
Devam eden bir çalışma. Birden fazla bölümler desteklenmektedir.
Özel bir düzen ile kullanmak için DraggableCollectionViewFlowLayout
. Çoğu mantığı LSCollectionViewLayoutHelper
var. Ayrıca WWDC 2012'de Apple'ın CircleLayout örnek bir iş yapmak için nasıl CircleLayoutDemo gösteren bir örnek var.
İOS temel Sürükle ve Bırak...
Sürüklenebilir bir klon yapmak ve drop...
jQuery Sürükle Ve Bırak Canlı Olayları...
Kesin bir Sürükle ve Bırak doğal ses i...
JQuery sürükle tıklayın olay önleme ve...