[英]iOS UIView transition, don't change the navigationbar
我有一個使用IB編輯的UIViewController
。 我在頂部放置了一個UINavigationBar
和一個UISegmentedControl
在其下面放置了3個UIViews
。 我希望能夠給之間切換UIViews
使用動畫,但我只想動畫UIViews
,我要的導航欄和athe segmentedControl就挪不動。 我顯示代碼現在如何執行。
任何想法我怎么只能移動3視圖?
- (IBAction)segmentedControlValueChanged:(id)sender {
UISegmentedControl* segmentedControl = sender;
if(lastSelectedViewIndex != [segmentedControl selectedSegmentIndex]) {
CATransition *transition = [CATransition animation];
transition.duration = 0.4;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn;
if(lastSelectedViewIndex < [segmentedControl selectedSegmentIndex])
transition.subtype = kCATransitionFromLeft;
else
transition.subtype = kCATransitionFromRight;
transition.removedOnCompletion = YES; // force removal of animation when completed.
{
switch ([segmentedControl selectedSegmentIndex]) {
case 0:
[self.usageScenarioView setHidden:NO];
[self.loginCredentialsView setHidden:YES];
[self.whatItCoversView setHidden:YES];
[self.pageControl setCurrentPage:0];
break;
case 1:
[self.usageScenarioView setHidden:YES];
[self.loginCredentialsView setHidden:NO];
[self.whatItCoversView setHidden:YES];
[self.pageControl setCurrentPage:1];
break;
case 2:
[self.usageScenarioView setHidden:YES];
[self.loginCredentialsView setHidden:YES];
[self.whatItCoversView setHidden:NO];
[self.pageControl setCurrentPage:2];
break;
}
}
lastSelectedViewIndex = [segmentedControl selectedSegmentIndex];
[self.view.layer addAnimation:transition forKey:nil];
}
}
假設您的3個視圖分別命名為view1,view2,view3。 如果要刪除view1並顯示view2或view3,則只需執行現有代碼,但更改
[self.view.layer addAnimation:transition forKey:nil];
進入
[view1.layer addAnimation:transition forKey:nil];
這將使view1而不是整個視圖動起來。 同樣,您可以嘗試,
[view2.layer addAnimation:transition forKey:nil];
[view3.layer addAnimation:transition forKey:nil];
更確切地說,喜歡
transition.removedOnCompletion = YES; // force removal of animation when completed.
{
switch ([segmentedControl selectedSegmentIndex]) {
case 0:
[self.usageScenarioView setHidden:NO];
[self.loginCredentialsView setHidden:YES];
[self.whatItCoversView setHidden:YES];
[self.pageControl setCurrentPage:0];
[self.usageScenarioView.layer addAnimation:transition forKey:nil];
break;
case 1:
[self.usageScenarioView setHidden:YES];
[self.loginCredentialsView setHidden:NO];
[self.whatItCoversView setHidden:YES];
[self.pageControl setCurrentPage:1];
[self.loginCredentialsView.layer addAnimation:transition forKey:nil];
break;
case 2:
[self.usageScenarioView setHidden:YES];
[self.loginCredentialsView setHidden:YES];
[self.whatItCoversView setHidden:NO];
[self.pageControl setCurrentPage:2];
[self.whatItCoversView.layer addAnimation:transition forKey:nil];
break;
}
}
lastSelectedViewIndex = [segmentedControl selectedSegmentIndex];
}
您可以在UISegmentedControl * segmentedControl下面的IB中定義一個UIView * containerView,該容器具有所需視圖的坐標和位置。 然后,您可以在該視圖內使用此功能在三個UIView之間進行轉換:
-(void) replacePreviousViewInContainerViewWith:(UIView*) newView {
[UIView transitionWithView:_containerView duration:0.7
options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveEaseIn
animations:^ {
[_containerView.subviews[0] removeFromSuperview];
[_containerView addSubview:newViewVC.view];
}
completion:^(BOOL finished) {
if (finished) {
NSLog(@"Now displaying %@.", [newView class]);
}
}];
[UIView commitAnimations];
}
然后您要在其中更改視圖的位置調用此函數:
UIViewController *newViewVC = [[UIViewController alloc] initWithNibName@"YOURNAME"];
newViewVC.view.frame = _containerView.frame;
[self replacePreviousViewInContainerViewWith: newViewVC.view];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.