2016-06-15 8 views
1

NSCollectionView의 scrollToIndexPaths:scrollPosition:에 애니메이션을 적용하려고합니다.이 메시지가 컬렉션 뷰의 animator 프록시로 전송되면 문서화에 따라 달성 할 수 있습니다. 그러나, 나는 그것을 작동시킬 수 없습니다.NSCollectionView의 scrollToIndexPaths에 애니메이션을 적용하는 방법 : scrollPosition :?

저는 컬렉션보기 외에 아무것도 포함하지 않고 1000 개의 100x100 항목을 만드는 매우 간단한 프로젝트를 설정했습니다. 간단한 조치는 보이는 색인 경로를 50 씩 증가시키고 그 색인으로 스크롤하려고 시도합니다. 내 스크롤 코드는 다음과 같습니다.

- (IBAction)increment:(id)sender { 
    NSIndexPath *visibleIndexPath = [[self.collectionView indexPathsForVisibleItems] anyObject]; 
    NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:visibleIndexPath.item + 50 inSection:visibleIndexPath.section]; 
    [self.collectionView.animator scrollToItemsAtIndexPaths:[NSSet setWithObject:toIndexPath] scrollPosition:NSCollectionViewScrollPositionCenteredHorizontally]; 
} 

이 경우 컬렉션보기가 대상 색인 경로로 이동하지만 움직이지 않습니다.

enter image description here

프로젝트에서 유일하게 다른 코드가 설정 몇 줄은 : 나는 스크롤 뷰가 나는이 발견 한 다른 스레드의 일부를 기반으로, 너무 보강층 것을 보장했다 viewDidLoad:의 콜렉션 뷰 및 플로우 레이아웃 :

// Do any additional setup after loading the view. 
    NSCollectionViewFlowLayout *flowLayout = [[NSCollectionViewFlowLayout alloc] init]; 
    flowLayout.itemSize = CGSizeMake(100.f, 100.f); 
    flowLayout.scrollDirection = NSCollectionViewScrollDirectionHorizontal; 
    self.collectionView.collectionViewLayout = flowLayout; 

    [self.collectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:@"identifier"]; 

사람이 scrollToIndexPaths:scrollPosition:를 사용하여 애니메이션을 할 수 있었다? 설명서는 분명하게 들리지만 작동시킬 수는 없습니다. 당신의 애니메이션 태그 scrollToIndexPaths:scrollPosition

참조 퍼팅

답변

3

저도 같은 문제에 직면하고 그것을 해결하기 위해 잠시 동안을 보냈다. 그들은 비 속성 변경 코드를 돌보는 암시 적 애니메이션 개념을 가지고 있습니다. 나는. 애니메이터가 특정 속성을 애니메이션화하지만 다른 레이아웃 변경은 애니메이션화하지 않는 것처럼 보입니다. 이러한 "기타"변경 사항을 애니메이션화하려면 현재 애니메이션 컨텍스트에 암시 적 애니메이션 허용을 설정해야합니다. 여기 내 작업 코드는 다음과 같습니다.

let ctx = NSAnimationContext.current() 
ctx.allowsImplicitAnimation = true 

collectionView.animator().scrollToItemsAtIndexPaths(Set<NSIndexPath>(arrayLiteral: nextPath), scrollPosition: .TrailingEdge) 

참고 : 최신 Swift 구문을 지원하도록 스 니펫을 편집했습니다.

+0

완벽! 그것은 트릭을했다. 나는 내가 OS X에서 애니메이션에 대해 더 포괄적 인 지식을 가지고 있다면 그것을 알아 냈어야한다고 생각한다.하지만 나는 언급 한 문서 중 어느 것도 놀랍지 않다. – ppilone

+0

어리석은 문제에 대해 미쳐 버렸습니다. 여기 당신의 대답을 발견해 주셔서 감사합니다! 굉장해! – JFS