2015-11-04 98 views
5

有沒有一種方法可以禁用細胞聚焦時自動滾動UICollectionView?我想在調整焦點時手動調整單元格的內容偏移量。禁用聚焦觸發滾動的UICollectionView

我wan't更新內容偏移:

- (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]; 
} 

這工作,但由於焦點引擎也移動我的手機(滾動它)我最終的動畫是不光滑,有「踢」在它的結尾。

回答

-1

我不知道你的意思與「自動滾動」的東西,但改變你可以使用didUpdateFocusInContext在您的自定義單元格類集合視圖細胞。

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) 
} 

或者,如果你沒有一個自定義單元格,使用didUpdateFocusInContext從UICollectionViewDelegate。

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

對不起,我想你是誤會我的問題。我發佈了更多的代碼。我需要的是有一個集合視圖,當焦點從一個單元格移動到另一個單元格時,不會自動更新內容偏移量。我想自己手動執行內容偏移操作。 – RaffAl

-1

由於UICollectionView子類UIScrollView,您的集合視圖委託可以實現滾動視圖的委託方法。你可能想的一個是:

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

targetContentOffset將滾動偏移的UIKit將默認滾動,但如果你改變了值,那麼會的UIKit反而有滾動。

如果你確實不希望UIKit爲你做任何自動滾動,你總是可以通過設置scrollEnabledNO來完全禁用滾動。

1

剛纔碰到了這個確切的東西。要禁用UICollectionView的自動滾動當焦點的變化,只是禁用在接口生成器中的集合視圖的「滾動查看」屬性滾動:

enter image description here