2015-11-04 20 views
5

Odaklama tetiklemeli odak kaydırmayı devre dışı bırak Hücre odaklandığında UICollectionView otomatik kaydırmayı devre dışı bırakmanın bir yolu var mı? Odaklandığı zaman hücrenin içerik ofsetini elle ayarlamak istiyorum.UICollectionView

- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context 
     withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator 
{ 
    [coordinator addCoordinatedAnimations:^ 
    { 
     [UIView animateWithDuration:[UIView inheritedAnimationDuration] 
          animations:^ 
      { 
       // Move next focused cell. 
       if ([context.nextFocusedView isKindOfClass:[YBZEventCollectionViewCell class]]) 
       { 
        UICollectionViewCell *cell = (UICollectionViewCell *)context.nextFocusedView; 

        CGPoint offset = CGPointMake(CGRectGetMinX(cell.frame), 0.0f); 

        [_collectionView setContentOffset:offset]; 
       } 
      }]; 

    } completion:nil]; 
} 

Bu çalışır, ancak odak motoru da cep hamle beri (parşömenlerini o) Ben düzgün olmayan animasyon ile bitirmek, bir var:

ben de ofset içeriğini güncellemek için wan't Sonunda "tekme".

cevap

-1

'Otomatik kaydırma' ile ne demek istediğimi bilmiyorum, ancak koleksiyon hücresi görünümünü değiştirmek için özel hücre sınıfınızda didUpdateFocusInContext kullanabilirsiniz. Özel bir hücreyi yoksa

override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { 
    coordinator.addCoordinatedAnimations({ [unowned self] in 
     if self.focused { 
      self.titleTopConstraint.constant = 27 

      self.titleLabel.textColor = UIColor.whiteColor() 
     } else { 
      self.titleTopConstraint.constant = 5 

      self.titleLabel.textColor = UIColor(red: 100/255, green: 100/255, blue: 100/255, alpha: 1) 
     } 
     self.layoutIfNeeded() 
    }, completion: nil) 
} 

Veya UICollectionViewDelegate dan didUpdateFocusInContext kullanın.

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { 
    coordinator.addCoordinatedAnimations({() -> Void in 
     if let indexPath = context.nextFocusedIndexPath, let cell = collectionView.cellForItemAtIndexPath(indexPath) { 
      // the cell that is going to be focused 
     } 
     if let indexPath = context.previouslyFocusedIndexPath, let cell = collectionView.cellForItemAtIndexPath(indexPath) { 
      // the cell that is going to be unfocused 
     } 
    }, completion: nil) 
} 
+0

Üzgünüm, soruma yanlış anladın. Daha fazla kod yayınladım. İhtiyacım olan şey, odak bir hücre diğerine geçerken içerik ofsetini otomatik olarak güncellemeyen bir koleksiyon görünümüne sahip olmaktır. İçeriği manuel olarak manipülasyonu kendim yapmak istiyorum. – RaffAl

-1

UIScrollView alt sınıfları UICollectionView olduğundan, toplama görünümü temsilci kaydırma görünümü temsilci yöntemleri uygulayabilir. muhtemelen istediğiniz biridir:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
       withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset 

targetContentOffset kaydırma UIKit varsayılan olarak ilerleyin edeceğini ofset olacak, ancak değerini değiştirirseniz o zaman UIKit yerine orada kayar.

Gerçekten de UIKit'in sizin için herhangi bir otomatik kaydırma yapmasını gerçekten istemiyorsanız, scrollEnabled ayarını NO'a ayarlayarak kaydırma işlemini tamamen devre dışı bırakabilirsiniz.

1

Sadece bu tam olarak bir şeyle karşılaştım. Odak değişiklikleri, sadece arayüz oluşturucudaki toplama görünümü için 'Scroll Görünüm' özelliklerinde kaydırma özellikleri devre dışı bırakıldığında bir UICollectionView otomatik kaydırmayı devre dışı bırakmak için:

enter image description here