중화사전망 - 중국어 사전 - IOS 용 UIPageViewController 페이지 뷰 컨트롤러 설명

IOS 용 UIPageViewController 페이지 뷰 컨트롤러 설명

I. 소개

UIPageViewController 는 iOS 에서 보기 드문 애니메이션 뷰 제어기 중 하나입니다. UIScrollView 와 UIPageControl 의 조합과 유사한 스크롤 보기를 만들거나 책 효과와 같은 멋진 페이지 넘기기 보기를 만들 수 있습니다.

UIPageViewController 는 원래 iOS 5 SDK 에 도입되어 개발자가 이 ViewController 를 사용하여 페이지 보기를 만들 수 있습니다. IOS 6 에서 이 클래스는 롤링 전환을 지원하도록 업데이트되었습니다. 페이지 보기를 사용하면 제스처를 통해 여러 페이지 사이를 쉽게 탐색할 수 있습니다. UIPage ViewController 는 페이지 안내에만 사용되는 것이 아니라, 앵그리 버드와 같은 많은 게임들이 페이지 뷰를 사용하여 수준 선택 페이지를 표시하고 책 관련 어플리케이션도 있습니다. 이 클래스는 책의 페이지를 표시하는 데 사용됩니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), Northern Exposure (미국 TV 드라마), 독서명언

UIPageViewController 는 다음과 같이 구성할 수 있는 고도로 구성 가능한 클래스입니다.

페이지 방향-가로 또는 세로 페이지 스타일-책 페이지 또는 슬라이드 페이지 제본 영역 위치-책 페이지 스타일만 페이지 간격에 유효합니다. 슬라이드 페이지 스타일만 페이지 간 간격 정의에 유효합니다.

UIPageViewController 는 각 특정 뷰가 자체 ViewController 에 의해 유지 및 관리되고 UIPageViewController 는 조정 및 애니메이션만 담당하는 뷰 컨테이너와 유사합니다. 다음 그림은 UIPageViewControlelr 의 사용 구조를 잘 보여줍니다.

위 그림에서 UIPageViewControllerDataSource 프로토콜은 UIPageViewController 에 대한 데이터 지원을 제공하며 DataSource 프로토콜이 제공하는 데이터는 각 ViewController 에서 유지 관리합니다. UIPageViewControllerDelegate 의 콜백은 페이지 넘기기와 화면 회전을 모니터링합니다. UIPageViewController 는 DataSource 에서 가져온 뷰 데이터를 View 로 렌더링하여 현재 뷰 컨트롤러 표시에 사용합니다.

데모를 위해 간단한 응용 프로그램을 함께 만들겠습니다. 물론 UIPageViewController 의 모든 구성 세부 사항을 설명하지는 않지만 슬라이드 페이지 스타일을 사용하여 마법사 페이지를 만드는 방법을 보여 드리겠습니다. 하지만 걱정하지 마세요. UIPageViewController 에 대한 기본적인 이해가 있습니다. 다른 특성도 탐구할 수 있다고 믿습니다.

시작하자!

두 번째로 UIPageViewController 를 만듭니다.

먼저 페이지 보기 제어기에 각 페이지 보기의 제어기로 새 클래스를 만들고 UIViewController 를 상속합니다.

ModelViewController.h

# 가져오기

@ interface model view controller: ui view controller

+(모델 뷰 컨트롤러 *) creatwithindex: (int) index;

@property(nonatomic, strong)ui label * index label;;

@end

ModelViewController.m

#' ModelViewController.h' 가져오기

@interface ModelViewController ()

@end

@ 모델 뷰 컨트롤러 구현

+(모델 뷰 컨트롤러 *) creatwinthindex: (int) 인덱스 {

Model view controller * con = [[model view controller alloc] init];

Con.indexlabel = [[ui label alloc] initwithframe: cgrectmake (110,200

Con.indexlabel.text = [ns string string with format: @ "page% d", index];

[con.view add subview: con.indexlabel];

Con 으로 돌아가기

}

-(void)viewDidLoad {

[슈퍼 viewdidload];

//뷰를 로드한 후 추가 설정을 수행합니다.

Self.view.backgroundcolor = [ui color red color];

}

@end

프로젝트 템플릿과 함께 제공된 ViewController.m 파일에서 다음 코드를 구현합니다.

# "ViewController.h" 가져오기

#' ModelViewController.h' 가져오기

//계약 준수

@interface ViewController ()

{

//페이지 뷰 컨트롤러 객체

Uipageviewcontroller * _ pageviewcontrol;

//데이터 소스 배열

NSMutableArray * _ dataArray

}

@end

@ 뷰 컨트롤러 구현

-(void)viewDidLoad {

[슈퍼 viewdidload];

//초기화

_ pageviewcontrol = [[uipageviewcontroller alloc] Initwithfransitionstyle: uipageviewcontrollertransitionstylescroll navigation orientation: uipageviewcontrollerorientionhos Controller options spinelocationkey: @ 0, uipageviewcontrolleroptions interpagespacingkey: @10}] 입니다

Self.view.backgroundcolor = [ui color green color];

//페이지 뷰의 크기를 설정합니다.

_ pageviewcontrol.view.bounds = self.view.bounds;

//데이터 소스 및 에이전트 설정

_ pageviewcontrol.datasource = self;

_ pageviewcontrol.delegate = self;

//초기 인터페이스 만들기

Model view controller * model = [model view controller creatwithindex:1];

//초기 인터페이스 설정

[_ page view control set view controllers: @ [model] direction: uipageviewcontrollernavigationdirectionreverse animation

//양면 표시 여부를 설정합니다.

_ pageviewcontrol.doublesided = no;

_ dataarray = [[nsmutablearray alloc] init];

[_ data array add object: 모델];

[self.view add subview: _ page viewcontrol.view];

}

//페이지 넘기기 컨트롤러가 앞으로 페이지를 넘깁니다. 이 데이터 소스 메서드에서 반환된 뷰 제어기는 뷰를 표시하는 뷰 제어기입니다.

-(null 일 수 있는 uiviewcontroller *) pageview controller: (uipageviewcontroller *) pageview controller view controller beffer

Intindex = (int) [_ data array index of object: view controller];

If (index==0) {

Nil 을 반환합니다

} 그렇지 않으면 {

Return _ dataarray [인덱스-1];

}

}

//페이지 넘기기 컨트롤러는 뒤로 페이지 넘기기 동작을 수행합니다. 이 데이터 소스 메서드에서 반환된 뷰 제어기는 뷰를 표시하는 뷰 제어기입니다.

-(null 일 수 있는 uiviewcontroller *) pageview controller: (uipageviewcontroller *) pageview controller viewcontrollerafter

Intindex = (int) [_ data array index of object: view controller];

If (index==9) {

Nil 을 반환합니다

} 그렇지 않으면 {

If (_ dataarray.count-1> = (인덱스+1)) {

Return _ dataarray [인덱스+1];

} 그렇지 않으면 {

Model view controller * model = [model view controller creatwithindex: index+2];

[_ data array add object: 모델];

반품 모드

}

}

}

//화면 회전 트리거에 대한 프록시 메서드

-(uipageviewcontrollerspinelocation) pageview 컨트롤러: (uipageviewcontroller *) pageview controller spinelocation

Uipageviewcontrollerspinelocationmin 을 반환합니다.

}

//페이징 컨트롤러의 페이징 번호를 설정합니다.

-(nsinteger) presentationcountforpageviewcontroller: (uipageviewcontroller *) pageview controller {

10 을 반환합니다.

}

//초기 탭 설정

-(nsinteger) presentationindexforpageviewcontroller: (uipageviewcontroller *) pageview controller {

0 을 반환합니다

}

@end

페이지 넘기기 뷰 컨트롤러의 가장 간단한 예는 다음과 같습니다.

셋째, UIPageViewController 의 방법 사용 분석

//페이지 보기 컨트롤러 개체 만들기

-(instancetype) initwithhtransitionstyle: (uipageviewcontrollertransitionstyle) style navigation orientation: Navigation orientation options: (null 일 수 있는 ns dictionary *)options;;

위 방법은 uipageviewcontrollertransitionstyle 매개 변수가 페이지 넘기기 제어기의 스타일을 설정하는 뷰 제어기 오브젝트를 만드는 데 사용됩니다. 열거된 내용은 다음과 같습니다.

Typedef NS_ENUM(NSInteger, uipageviewcontrollertransitionstyle) {

Uipageviewcontrollertransitionstylepagecurl = 0,//책 페이지 넘기기 효과와 비슷합니다.

Uipageviewcontrollertransitionstylescroll =1//ScrollView 의 슬라이딩 효과와 비슷합니다.

}

Ui pageview controllertransitionstylecurl 로 설정된 경우 페이지 넘기기 효과는 다음 그림과 같습니다.

위 초기화 방법의 uipageviewcontrollernavigationorientation 속성은 다음과 같이 페이지 넘기기 방향을 설정합니다.

Typedef NS_ENUM(NSInteger, uipageviewcontrollernavigationorientation) {

Uipageviewcontrollernavigationorientationhorizontal = 0,//수평 페이지 넘기기.

Uipageviewcontrollernavigationorientationvertical =1//수직 페이지 넘김.

}

Options 매개변수는 페이지 넘기기 보기 컨트롤러의 구성 사전을 설정하는 데 사용됩니다. 설정할 수 있는 구성 키 값은 다음과 같습니다.

//이 키는 uipageviewcontrolleroptionsspinelocationkey 열거값에 해당하는' NSNumber 객체' 로 설정해야 하며, 페이지 넘기 컨트롤러의 북축은 나중에 설정해야 합니다.

Nsstring * const uipageviewcontrolleroptions spinelocationkey;

//이 키는 NSNumber 유형으로 설정하고 스크롤 뷰 스타일에 대해 각 페이지 뷰의 간격을 설정해야 합니다.

Nsstring * const uipageviewcontrolleroptioninterpagespacingkey;

다음은 UIPageViewController 의 몇 가지 일반적인 속성 및 메서드입니다.

//데이터 소스 설정

@property (null 가능, 비원자, 약한) iddelegate.

//프록시 설정

@property (null 가능, 비원자, 비고정) iddataSource.

//페이지 넘김 스타일 가져오기

@property (nonatomic, readonly) uipageviewcontrollertransitionstyle transition style;

//페이지 넘기기 방향 가져오기

@property (nonatomic, readonly) uipageviewcontrollernavigationorientation navigation orientation;

//롤링 유형 가져오기

@property (nonatomic, readonly) uipageviewcontrollerspinelocation spinelocation;

//양면 표시 여부를 설정합니다.

@property (nonatomic, getter = isdouble sided) bool double sided;

//표시할 뷰 제어기를 설정합니다.

-(void) setviewcontrollers: (nullable nsarray *) view controllers direction: (uipageviewcontrollernavigations Animatedcompletion: (void (_ _ nullable) (bool finished)) completion;

위의 spineLocation 속성만 이해하기 어렵다. 그 열거는 다음과 같다.

Typedef NS_ENUM(NSInteger, uipageviewcontrollerspinelocation) {

//SCrollView 유형 슬라이딩 효과의 경우 스크롤하지 않으면 다음 열거 값이 반환됩니다.

Uipageviewcontrollerspinelocationnone = 0,

//한 번에 하나의 뷰만 표시되도록 인터페이스를 왼쪽 또는 위로 회전합니다.

Uipageviewcontrollerspinelocationmin =1,

//두 뷰를 동시에 표시하는 가운데 축을 기준으로 인터페이스를 대칭 이동합니다.

Uipageviewcontrollerspinelocationmid = 2,

//아래 또는 오른쪽 모서리는 축 대칭 이동 인터페이스이며 한 뷰만 표시됩니다.

Uipageviewcontrollerspinelocationmax = 3

}

위의 예제 코드를 다음과 같이 수정합니다.

-(void)viewDidLoad {

[슈퍼 viewdidload];

//뷰를 로드한 후 추가 설정 (일반적으로 nib 에서) 을 수행합니다.

_ pageviewcontrol = [[uipageviewcontroller alloc] Initwithfransitionstyle: uipageviewcontrollertransitionstylepagecurl navigation orientation: uipageviewcontrolleroptionspions Trolleroptions:@ 2, uipageviewcontrolleroptioninterpagespacingkey: @10}];

Self.view.backgroundcolor = [ui color green color];

_ pageviewcontrol.view.bounds = self.view.bounds;

_ pageviewcontrol.datasource = self;

_ pageviewcontrol.delegate = self;

Model view controller * model = [model view controller creatwithindex:1];

Model view controller * model2 = [model view controller creatwithindex: 2];

[_ pageview control set view controllers: @ [model, model 2] direction: uipageviewcontrollernavigationdirectionrs

_ pageviewcontrol.doublesided = yes;

_ dataarray = [[nsmutablearray alloc] init];

[_ data array add object: 모델];

[self.view add subview: _ page viewcontrol.view];

}

-(uipageviewcontrollerspinelocation) pageview 컨트롤러: (uipageviewcontroller *) pageview controller spinelocation

Uipageviewcontrollerspinelocationmid 를 반환합니다.

}

작동 효과는 다음 그림과 같습니다.

넷째, UIPageViewControllerDataSource 의 방법 분석

//페이지를 앞으로 이동하여 ViewController 를 표시합니다.

-(빈 uiviewcontroller *) pageview 컨트롤러: (uipageviewcontroller *) pageview controller view controller beforeview

//페이지로 돌아가서 ViewController 를 표시합니다.

-(빈 uiviewcontroller *) pageview 컨트롤러: (uipageviewcontroller *) pageview controller viewcontrollerafterview

//페이징 컨트롤러의 페이징 번호를 설정합니다.

-(nsinteger) presentationcountforpageviewcontroller: (uipageviewcontroller *) pageview controller ns _ availar

//현재 페이징 컨트롤러의 하이라이트를 설정합니다.

-(nsinteger) presentationindexforpageviewcontroller: (uipageviewcontroller *) pageview controller ns _ availar

다섯째, UIPageViewControllerDelegate 의 방법 분석

//페이지 보기 컨트롤러가 페이지를 넘기려고 할 때 수행할 방법입니다.

-(void) pageview 컨트롤러: (uipageviewcontroller *) pageview controller willtransitiontoviewcontrollers: (;

//페이지 넘기기 애니메이션이 완료된 후 콜백 메서드.

-(void) pageview 컨트롤러: (uipageviewcontroller *) pageview controller did finish animating: (bool) finimating Previousviewcontrollers transition completed: (bool) completed;

//화면 방어선이 변경될 때 반환될 메서드의 경우 반환 값을 통해 북축 유형 열거를 재설정할 수 있습니다.

-(uipageviewcontrollerspinelocation) pageview 컨트롤러: (uipageviewcontroller *) pageview controller spinelocation