2014-01-14 65 views
4

我對iOS開發有點新。我正在研究一個包含大約5,000個可視數據點的應用程序,並按類別進行組織。我想用非常小的UICollectionViewCells將它們呈現在UICollectionView中。當用戶點擊某個類別中的某些內容時,該類別將放大所選單元格的焦點。非常像iOS 7照片應用程序的「照片」選項卡的工作方式:年>集合>時刻。iOS 7照片應用程序像自定義UIViewController轉換

我該如何去實現這樣的自定義轉換?是否有任何開放源代碼的庫已經寫完成?

回答

3

如果找不到任何庫,請嘗試使用我爲自定義動畫編寫的代碼進行操作。您可以指定要放大或縮小的視圖的起點,終點,起始縮放比例和結束縮放比例。請參閱下面的示例我如何使用它。重點是使用虛假的視圖推動動畫,然後推動和彈出真實的視圖沒有動畫。 viewobj被設置爲從alpha 0到alpha 1淡入,zoomableView將從您給出的參數的點/比例縮放到您在storyboard/xib中設置的最終位置。希望它會有所幫助。

@你可以創建一個類VOR的UIView並添加這些方法

- (void) addSubView:(UIView*)viewObj animateFromPoint:(CGPoint)point zoomableView:(UIView*)view minScale:(CGSize)scale completion:(void (^)(void))completionBlock{ 
    CGPoint center = view.center; 
    [view setTransform:CGAffineTransformMakeScale(scale.width, scale.height)]; 
    viewObj.alpha = 0; 
    view.center = point; 

    [self addSubview:viewObj]; 
    [self addSubview:view]; 

    [UIView animateWithDuration:0.3 
          delay:0.0 
         options:UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         view.center = center; 
         [view setTransform:CGAffineTransformMakeScale(1.0, 1.0)]; 
         viewObj.alpha = 1; 
        } 
        completion:^(BOOL fin){ 
         if(completionBlock) 
          completionBlock(); 
        }]; 
} 

- (void) removeFromSuperviewAnimateToPoint:(CGPoint)point zoomableView:(UIView*)view minScale:(CGSize)scale completion:(void (^)(void))completionBlock{ 
    CGRect startFrame = view.frame; 
    self.alpha = 1; 

    [self.superview addSubview:view]; 

    [UIView animateWithDuration:0.3 
          delay:0.0 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 
         view.center = point; 
         [view setTransform:CGAffineTransformMakeScale(scale.width, scale.height)]; 
         self.alpha = 0; 
        } 
        completion:^(BOOL fin){ 

         [self removeFromSuperview]; 
         [view removeFromSuperview]; 
         [view setTransform:CGAffineTransformMakeScale(1, 1)]; 
         view.frame = startFrame; 
         [self addSubview:view]; 

         if(completionBlock) 
          completionBlock(); 
        }]; 
} 

,並使用它們:

  self.itemDetails = [self.storyboard instantiateViewControllerWithIdentifier:@"ItemDetailsVC"]; 
      ItemDetailsVC* itd = [self.storyboard instantiateViewControllerWithIdentifier:@"ItemDetailsVC"]; 
      __weak UIViewController* wself = self; 
      [self.view addSubView:self.itemDetails.view animateFromPoint:self.zoomedFrom zoomableView:self.itemDetails.viewZoomable minScale:CGSizeMake(0.371134, 0.371134) completion:^{ 
       [wself.navigationController pushViewController:itd animated:NO]; 
      }]; 
self.addSubviewIsUp = YES; 

@回:

@你在索引路徑做了選擇項您添加的視圖按鈕:

 [self.navigationController popViewControllerAnimated:NO]; 

@ viewdidapear你的主屏幕

if(self.addSubviewIsUp){ 
    [self.addVc.view removeFromSuperviewAnimateToPoint:CGPointMake(160, 75) zoomableView:self.addVc.zoomableView minScale:CGSizeMake(0.01, 0.01) completion:^{ 
    }]; 
} 
self.addSubviewIsUp = NO; 
相關問題