2013-09-23 61 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,用你的捏來驅動變換並隱藏原始單元格。在擴展控制器時,您會更新完成百分比,以便導航欄隨着轉換更新。

如果你想要更多的細節,我可以包括如何計算轉換等,當我到電腦?