iOS
UIPageViewController
수색…
소개
UIPageViewController는 사용자가 스 와이프 제스처를 사용하여 여러보기간에 쉽게 전환 할 수있는 기능을 제공합니다. UIPageViewController를 만들려면 UIPageViewControllerDataSource 메서드를 구현해야합니다. 여기에는 현재 UIPageViewController 전후의 UIPageViewController와 presentationCount 및 presentationIndex 메서드를 모두 반환하는 메서드가 포함됩니다.
통사론
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
비고
Apple 개발자 참조 여기
프로그래밍 방식으로 수평 페이징 UIPageViewController 만들기
- UIPageViewController에 의해 관리되는 뷰 컨트롤러의 초기화 배열입니다. UIPageViewController 데이터 소스 메소드로 작업 할 때 뷰 컨트롤러를 식별하는 데 사용될 속성
identifier
가있는 기본 뷰 컨트롤러 클래스를 추가합니다. 뷰 컨트롤러가 그 기본 클래스로부터 상속 받도록하십시오.
UIViewController *firstVC = [[UIViewController alloc] init];
firstVC.identifier = 0
UIViewController *secondVC = [[UIViewController alloc] init];
secondVC.identifier = 1
NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
- UIPageViewController 인스턴스를 생성합니다.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- 데이터 소스는
UIPageViewControllerDataSource
프로토콜을 구현UIPageViewControllerDataSource
현재 클래스입니다.
pageViewController.dataSource = self;
-
setViewControllers
는 첫 번째 뷰 컨트롤러 만 추가하고 다음은 데이터 소스 메서드를 사용하여 스택에 추가됩니다.
if (viewControllers.count) {
[pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
}
- UIPageViewController를 자식 뷰 컨트롤러로 추가하여 부모 뷰 컨트롤러
appearance
및rotation
이벤트에서 받도록합니다.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- UIPageViewControllerDataSource 메소드 구현하기
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
{
index = [(Your View Controler Base Class *)viewController identifier];
index--;
return [self childViewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
{
index = [(Your View Controler Base Class *)viewController identifier];
index++;
return [self childViewControllerAtIndex:index];
}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return [viewControllers count];
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return index;
}
- 인덱스를 사용하여 뷰 컨트롤러를 반환하는 유틸리티 메소드입니다. 인덱스가 범위를 벗어나면 nil을 반환합니다.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
if (index <= ([viewControllers count] - 1)) {
return [viewControllers objectAtIndex:index];
} else {
return nil;
}
}
수평 페이지 뷰 컨트롤러 (무한 페이지)를 만드는 간단한 방법
- 새 프로젝트를 만들어 보겠습니다. 더 나은 데모를 위해 Single View Application을 선택합니다.
- 페이지보기 컨트롤러를 스토리 보드로 드래그하면 변경해야 할 두 가지 사항이 있습니다.
- 페이지 뷰 컨트롤러를 초기보기 컨트롤러로 설정
- 스크롤 할 전환 스타일 변경
그리고 UIPageViewController 클래스를 만든 다음 스토리 보드에서 페이지 뷰 컨트롤러의 맞춤 클래스로 설정해야합니다.
이 코드를 UIPageViewController 클래스에 붙여 넣으면 색이있는 무한 페이징 된 응용 프로그램을 가져와야합니다. :)
class PageViewController: UIPageViewController, UIPageViewControllerDataSource { override func viewDidLoad() { self.dataSource = self let controller = createViewController() self.setViewControllers([controller], direction: .forward, animated: false, completion: nil) } func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { let controller = createViewController() return controller } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { let controller = createViewController() return controller } func createViewController() -> UIViewController { var randomColor: UIColor { return UIColor(hue: CGFloat(arc4random_uniform(360))/360, saturation: 0.5, brightness: 0.8, alpha: 1) } let storyboard = UIStoryboard(name: "Main", bundle: nil) let controller = storyboard.instantiateViewController(withIdentifier: "View Controller") controller.view.backgroundColor = randomColor return controller } }
이것이 최종 프로젝트의 모습입니다. 스크롤 할 때마다 다른 색상의 뷰 컨트롤러가 생성됩니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow