스토리보드가 도입되면서 스토리보드상에서 콘트롤러와 콘트롤러를 연결해주기만 하면 전면전환이 되는 편리한 기능이 추가 되었다.
(모달,푸쉬 그리고 애니메이션 옵션등 약간의 설정이 필요하긴 하다.)
예전에 코드로 전부 써주어야 했던것이 스토리보드로 흡수되면서 기본적인 화면전환의 경우는 코드없이도 간단하게 구현이 가능하다.
물론 몇번의 마우스클릭의 수고는 필요.
만약 Modal, Push 형태 이외의 화면전환이 필요한 경우는 화면전환 전용클래스(UIStoryboardSegue)를 이용하여 정의(커스텀)해 줄수 있는데
화면전환에 관련된 코드가 세그에 정의됨으로써 보다 가독성도 높일 수 있다.
스토리보드 사용법에 대해서는 다른 블로그에도 많이 소개 되어 있으므로 세그에(Segue)를 커스텀하여 애니메애션을 주는 방법을 몇가지 소개햐려 한다.
우선 UIStoryboardSegue를 상속받는 세그에(Segue)클래스를 생성한다.
@interface KJCodeMenuSegue : UIStoryboardSegue
@end
정의에는 perform메소드를 재정의 해준다. 여기에서 애니메이션과 화면전환을 정의 해준다.
- Push, Pop 세그에 를 커스텀 할 경우 (modal의 경우도 마찬가지 방법으로 처리해도 된다.)
- (void)perform {
//하나의 클래스에 여러개의 처리를 위해 id를 이용하여 분기해도 됨.
NSLog(@"%@", self.identifier);
//뷰콘트롤러 인스턴스 취득
UIViewController *sourceViewController = (UIViewController *)self.sourceViewController;
UIViewController *destinationViewController = (UIViewController *)self.destinationViewController;
if (self.identifier isEqualToString:@"menuPush") {
//화면전환 애니메이션
[UIView transitionWithView:sourceViewController.navigationController.view
duration:0.5f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
//실제로 화면전환코드를 작성. 단 애니메이션은 겹치지 않도록 NO로 설정
[sourceViewController.navigationController pushViewController:destinationViewController animated:NO];
}
completion:nil];
}else if(self.identifier isEqualToString:@"menuPush") {
//화면전환 애니메이션
[UIView transitionWithView:sourceViewController.navigationController.view
duration:0.5f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
//실제로 화면전환코드를 작성. 단 애니메이션은 겹치지 않도록 NO로 설정
[sourceViewController.navigationController popViewControllerAnimated:NO];
}
completion:nil];
}
}
- 컨테이너뷰에서의 임베디드 세그에(embedSegue)를 커스텀할 경우
- (void) perform {
NSLog(@"%@", self.identifier);
UIViewController *containerViewController = (UIViewController *) self.sourceViewController;
UIViewController *nextViewController = (UIViewController *) self.destinationViewController;
UIViewController *currentViewController = (UIViewController *) containerViewController.currentViewController;
//컨테이너 콘트롤러에 화면전환 할 뷰콘트롤러를 자식뷰콘트롤러로 추가한다.
[containerViewController addChildViewController:nextViewController];
// 현재뷰콘트롤러에 이동(삭제)될 뷰 라는것을 통지한다.
[currentViewController willMoveToParentViewController:nil];
// 전환될 뷰콘트롤러와 현재 뷰콘트롤러의 크기를 조정한다.
nextViewController.view.frame = currentViewController.view.frame;
// 화면전환 애니메이션 정의한다.
[containerViewController transitionFromViewController:currentViewController
toViewController:nextViewController
duration:0.1f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
}
completion:^(BOOL finished) {
//컨터이너뷰 안에서의 화면전환처리를 정의한다.
containerViewController.currentViewController = nextViewController;
[currentViewController removeFromParentViewController];
[nextViewController didMoveToParentViewController:containerViewController];
}];
}
'코딩(プログラミング)' 카테고리의 다른 글
파이썬으로 웹페이지 크롤링하기 - Scrapy환경설정(Mac) (1) (3) | 2014.08.29 |
---|---|
Objective-C 컨테이너뷰 발표자료 및 조사메모 (0) | 2014.05.15 |
(Objective-C) 스토리보드 커스텀 세그에(Storybaord Custom segue) 사용법 (0) | 2014.05.14 |
(Objective-C) EventKit을 사용한 캘린더 등록 및 표시하는 방법 (0) | 2014.05.08 |
Objective-C에서 NSData의 형변환 (0) | 2014.04.30 |
Objective-c KVO 샘플 구현하기 (0) | 2014.04.07 |
댓글을 달아 주세요