2013-09-23 64 views
8

我正在阅读Apples guidelinesanimating changes in a collection view,试图模仿照片的应用程序。选择图像时,图像会从collectionview中的区域“增长”为全尺寸视图。UICollectionViewTransitionLayout - 模仿iOS7照片collectionview布局

苹果笔记使用UICollectionViewLayout对象,但对我来说,它看起来非常混乱,并且全尺寸库中的最终图像不可见,因为动画是以collectionview为中心的。

我的代码如下

-(void)setHorizontalLayout:(BOOL)layout 
{ 
    if (layout == YES) 
    { 


     UICollectionViewTransitionLayout *layout =[self.collectionView startInteractiveTransitionToCollectionViewLayout:[self getHorizontalPagingLayout] completion:^(BOOL completed, BOOL finish) { 
      [self.collectionView setPagingEnabled:YES]; 
     }]; 

     [self.collectionView.collectionViewLayout invalidateLayout]; 
     layout.transitionProgress = 0.1; 
     double delayInSeconds = 0.1; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [self updateLayout:layout]; 
      //[self.collectionView.collectionViewLayout invalidateLayout]; 
      //[self.collectionView finishInteractiveTransition]; 

     }); 
     [self.collectionView.collectionViewLayout invalidateLayout]; 
     return; 
} 
} 

-(void)updateLayout:(UICollectionViewTransitionLayout *)layout 
{ 
    if (layout.transitionProgress >= 1.0) 
    { 

     [self.collectionView finishInteractiveTransition]; 
     return; 
    } 
    double delayInSeconds = 0.05; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     layout.transitionProgress += 0.005; 
     [self.collectionView.collectionViewLayout invalidateLayout]; 
     [self updateLayout:layout]; 
    }); 

} 

回答

0

我知道,照片实际使用的布局,布局上UICollectionViewController(导航过渡useLayoutToLayoutNavigationTransitions在2013年从时刻去年等(会话218时实现动画,如果我没有记错)

话虽这么说,事情就变得非常有趣,当你试图用手艺不同数据源收集的意见之间的过渡。在Objc.io的家伙在这个写了一个美丽的一块。

但是,如果你正在寻找实施捏开放效果其实际上比看起来更简单。

简而言之,假设我们只是想从集合视图中为单元格设置动画,以便展开为全屏视图控制器。在这种情况下,您只需实现一个自定义视图控制器转换,您可以将转换有效地应用于FullScreenPhotosViewController以使其在单元格的点处开始。然后我们简单地将变换动画化为全屏。

一旦你有时间让它交互,这一步的诀窍就是当你开始转换时隐藏collection视图单元,因为你想为全屏控制器设置动画而不是单元格(如果你不喜欢没有隐藏它,那么细胞仍然可见,并且会看起来很混乱)。所以基本上你现在握住你的手指的单元格实际上是FullScreenPhotosViewController,用你的捏来驱动变换并隐藏原始单元格。在扩展控制器时,您会更新完成百分比,以便导航栏随着转换更新。

如果你想要更多的细节,我可以包括如何计算转换等,当我到电脑?