programing

UIViewController 푸시를위한 커스텀 애니메이션

nasanasas 2021. 1. 6. 08:24
반응형

UIViewController 푸시를위한 커스텀 애니메이션


뷰 컨트롤러를 누를 때 사용자 지정 애니메이션을 표시하고 싶습니다. "확장"애니메이션과 같은 것을 얻고 싶습니다. 즉, 새 뷰가 주어진 사각형에서 확장된다는 것을 의미합니다. 애니메이션 중에 [100,100 220,380]이 전체 화면으로 표시됩니다.

각 문서, 자습서, 링크를 시작할 위치에 대한 제안이 있습니까? :)


좋구나. 다음 코드로 확장 애니메이션을 만들 수 있습니다.

if ([coming.view superview] == nil)   
    [self.view addSubview:coming.view];
    coming.view.frame = CGRectMake(160,160,0,0);
    [UIView beginAnimations:@"frame" context:nil];
    [UIView setAnimationDuration:4];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [coming viewWillAppear:YES];
    [going viewWillAppear:YES];
    coming.view.frame = CGRectMake(0, 0, 320, 480);
    [going viewDidDisappear:YES];
    [coming viewDidAppear:YES];
    [UIView commitAnimations];

내보기가 제대로 표시되지만 안타깝게도 탐색 모음이 업데이트되지 않았습니다. 수동으로 수행하는 방법이 있습니까?


샘플 코드에서 함수는 뷰의 변환을 업데이트하는 0.03 초 모두 호출됩니다. 안타깝게도를 누르면 UIViewController뷰의 프레임 크기를 조정할 수 없습니다.


할 수있는 일은 다음 뷰 컨트롤러를 푸시하되 애니메이션은하지 않는 것입니다.

[self.navigationController pushViewController:nextController animated:NO];

... 그런 다음 푸시되는 뷰 컨트롤러에서 CoreAnimation을 사용하여 뷰의 사용자 지정 애니메이션을 수행 할 수 있습니다. 이것은 viewDidAppear:(BOOL)animated방법 에서 가장 잘 수행 될 수 있습니다 .

실제로 애니메이션을 수행하는 방법에 대한 핵심 애니메이션 가이드확인하십시오 . 특히 암시 적 애니메이션을보십시오.

편집 : 업데이트 된 링크


다음 함수 (에 추가됨 UINavigationController)를 사용하여 푸시 애니메이션을 사용자 지정합니다.

- (void) pushController: (UIViewController*) controller
         withTransition: (UIViewAnimationTransition) transition
{
    [UIView beginAnimations:nil context:NULL];
    [self pushViewController:controller animated:NO];
    [UIView setAnimationDuration:.5];
    [UIView setAnimationBeginsFromCurrentState:YES];        
    [UIView setAnimationTransition:transition forView:self.view cache:YES];
    [UIView commitAnimations];
}

이 코드를 적용하여 원하는 애니메이션을 수행 할 수 있다고 생각합니다.


찾고있는 코드 :

    [UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:0.80];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationTransition:
 UIViewAnimationTransitionFlipFromRight
                       forView:self.navigationController.view cache:NO];


[self.navigationController pushViewController:menu animated:YES];
[UIView commitAnimations];

@zoul: That worked great! I just changed "self" to "self.navigationController" and "self.view" to "self.navigationController.view" Don't know if that was necessary, but it worked. And @crafterm, as for popping back, just make your own leftBarButtonItem by adding this code in viewDidLoad or ViewWillAppear:

//add your own left bar button
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)];
self.navigationItem.leftBarButtonItem = backButton;
[backButton release];

Then I just tweaked the push function and made this popWithTransition function that I called in my -backButtonTapped method.

- (void) popWithTransition: (UIViewAnimationTransition) transition
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.75];
    [UIView setAnimationBeginsFromCurrentState:YES];        
    [UIView setAnimationTransition:transition forView:self.navigationController.view cache:YES];
    [UIView commitAnimations];
[self.navigationController popViewControllerAnimated:NO];
}

Note that the popViewController call got shifted down to the end, after the animation. Don't know if that's kosher, but again, it worked.


What you want is the downloads for chapter 2 of iphone developers cookbook. Look at the affineRotate sample specifically, although any of the core animatin samples will help you.


Have a look at ADTransitionController, a drop in replacement for UINavigationController with custom transition animations (its API matches the API of UINavigationController) that we created at Applidium.

You can use different pre-defined animations for push and pop actions such as Swipe, Fade, Cube, Carrousel and so on. In your case, the animation you are requesting is the one called Zoom.

ReferenceURL : https://stackoverflow.com/questions/1406037/custom-animation-for-pushing-a-uiviewcontroller

반응형