我對iOS開發有點新。我正在研究一個包含大約5,000個可視數據點的應用程序,並按類別進行組織。我想用非常小的UICollectionViewCells將它們呈現在UICollectionView中。當用戶點擊某個類別中的某些內容時,該類別將放大所選單元格的焦點。非常像iOS 7照片應用程序的「照片」選項卡的工作方式:年>集合>時刻。iOS 7照片應用程序像自定義UIViewController轉換
我該如何去實現這樣的自定義轉換?是否有任何開放源代碼的庫已經寫完成?
我對iOS開發有點新。我正在研究一個包含大約5,000個可視數據點的應用程序,並按類別進行組織。我想用非常小的UICollectionViewCells將它們呈現在UICollectionView中。當用戶點擊某個類別中的某些內容時,該類別將放大所選單元格的焦點。非常像iOS 7照片應用程序的「照片」選項卡的工作方式:年>集合>時刻。iOS 7照片應用程序像自定義UIViewController轉換
我該如何去實現這樣的自定義轉換?是否有任何開放源代碼的庫已經寫完成?
如果找不到任何庫,請嘗試使用我爲自定義動畫編寫的代碼進行操作。您可以指定要放大或縮小的視圖的起點,終點,起始縮放比例和結束縮放比例。請參閱下面的示例我如何使用它。重點是使用虛假的視圖推動動畫,然後推動和彈出真實的視圖沒有動畫。 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;