iOS 의 UIPageViewController 페이지 넘 기기 컨트롤 러 인 스 턴 스 설명
13186 단어 iOSViewController
UIPageViewController 는 iOS 에서 보기 드 문 애니메이션 보기 컨트롤 러 중 하나 로 UIScrollView 와 UIPageControl 이 결 합 된 스크롤 백 보 기 를 만 들 수도 있 고 도서 효과 와 유사 한 시 크 한 페이지 넘 기기 보 기 를 만 들 수도 있다.
UIPageViewController 는 iOS 5 SDK 에서 처음으로 도입 되 었 습 니 다.이 ViewController 를 사용 하여 페이지 보 기 를 만 들 수 있 습 니 다.iOS 6 에 서 는 이 클래스 가 업데이트 되 어 스크롤 과도 효 과 를 지원 합 니 다.Page View 를 사용 하면 사용 자 는 손짓 을 통 해 여러 페이지 사 이 를 편리 하 게 탐색 할 수 있다.UIPageView Controller 는 안내 페이지 뿐만 아니 라 많은 게임 도 사용 합 니 다.예 를 들 어 앵 그리 버드 는 바로 Page View 로 관문 이 선택 한 페이지 를 보 여 주 는 것 입 니 다.그리고 관련 서적 의 응용 도 있 습 니 다.이런 종류 로 책의 페이지 를 보 여 줍 니 다.
UIPageViewController 는 고도 로 설정 할 수 있 는 클래스 입 니 다.다음 설정 을 할 수 있 습 니 다.
UIPageViewController 는 하나의 보기 용기 와 유사 합 니 다.그 중에서 모든 구체 적 인 보 기 는 각자 의 ViewController 에서 유지 관 리 를 하고 UIPageViewController 는 애니메이션 과 조 화 롭 게 배치 합 니 다.다음 그림 은 UIPageViewControlelr 의 사용 구 조 를 잘 보 여 줍 니 다.
위의 그림 에서 UIPageViewController DataSource 프로 토 콜 은 UIPageViewController 에 데이터 지원 을 제공 하고 DataSource 프로 토 콜 이 제공 하 는 데 이 터 는 각 ViewContoller 에서 자체 적 으로 유지 하 며 UIPageViewController Delegate 의 리 셋 은 페이지 넘 기 동작,화면 회전 동작 등 을 감청 할 수 있다.UIPageViewController 는 DataSource 에서 가 져 온 보기 데 이 터 를 현재 보기 컨트롤 러 에 보 여 줍 니 다.
시범 을 보이 기 위해 서,우 리 는 함께 간단 한 앱 을 만 들 것 이다.물론 모든 UIPageViewController 의 설정 디 테 일 을 보 여 주지 않 습 니 다.미끄럼 페이지 스타일 로 안내 페이지 를 만 드 는 것 을 보 여 드 리 겠 습 니 다.하지만 걱정 마 세 요.UIPageView Controller 에 대한 기본 적 인 이해 가 생 겼 으 니 다른 특성 을 탐색 할 수 있 을 거 라 고 믿 습 니 다.
시작 합 시다!
2.UIPageViewController 만 들 기
먼저 페이지 넘 기기 컨트롤 러 의 구체 적 인 각 페이지 보기 컨트롤 러 로 UIViewController 에 계승 할 클래스 를 새로 만 듭 니 다.
ModelViewController.h
#import <UIKit/UIKit.h>
@interface ModelViewController : UIViewController
+(ModelViewController *)creatWithIndex:(int)index;
@property(nonatomic,strong)UILabel * indexLabel;
@end
ModelViewController.m#import "ModelViewController.h"
@interface ModelViewController ()
@end
@implementation ModelViewController
+(ModelViewController *)creatWithIndex:(int)index{
ModelViewController * con = [[ModelViewController alloc]init];
con.indexLabel = [[UILabel alloc]initWithFrame:CGRectMake(110, 200, 100, 30)];
con.indexLabel.text = [NSString stringWithFormat:@" %d ",index];
[con.view addSubview:con.indexLabel];
return con;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor redColor];
}
@end
프로젝트 템 플 릿 이 자체 적 으로 가지 고 있 는 ViewController.m 파일 에서 다음 과 같은 코드 를 실현 합 니 다.#import "ViewController.h"
#import "ModelViewController.h"
//
@interface ViewController ()<UIPageViewControllerDataSource,UIPageViewControllerDelegate>
{
//
UIPageViewController * _pageViewControl;
//
NSMutableArray * _dataArray;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//
_pageViewControl = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:@{UIPageViewControllerOptionSpineLocationKey:@0,UIPageViewControllerOptionInterPageSpacingKey:@10}];
self.view.backgroundColor = [UIColor greenColor];
//
_pageViewControl.view.bounds=self.view.bounds;
//
_pageViewControl.dataSource=self;
_pageViewControl.delegate=self;
//
ModelViewController * model = [ModelViewController creatWithIndex:1];
//
[_pageViewControl setViewControllers:@[model] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];
//
_pageViewControl.doubleSided = NO;
_dataArray = [[NSMutableArray alloc]init];
[_dataArray addObject:model];
[self.view addSubview:_pageViewControl.view];
}
//
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
int index = (int)[_dataArray indexOfObject:viewController];
if (index==0) {
return nil;
}else{
return _dataArray[index-1];
}
}
//
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
int index = (int)[_dataArray indexOfObject:viewController];
if (index==9) {
return nil;
}else{
if (_dataArray.count-1>=(index+1)) {
return _dataArray[index+1];
}else{
ModelViewController * model = [ModelViewController creatWithIndex:index+2];
[_dataArray addObject:model];
return model;
}
}
}
//
- (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{
return UIPageViewControllerSpineLocationMin;
}
//
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
return 10;
}
//
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{
return 0;
}
@end
위 에 가장 간단 한 페이지 넘 기기 보기 컨트롤 러 예 시 를 만 들 었 습 니 다.효 과 는 다음 그림 과 같 습 니 다.3.UIPageViewController 에서 의 방법 사용 분석
//
- (instancetype)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(nullable NSDictionary<NSString *, id> *)options;
위의 방법 은 보기 컨트롤 러 대상 을 만 드 는 데 사 용 됩 니 다.그 중에서 UIPageViewController Transition Style 매개 변 수 는 페이지 넘 기기 컨트롤 러 의 스타일 을 설정 합 니 다.다음 과 같 습 니 다.typedef NS_ENUM(NSInteger, UIPageViewControllerTransitionStyle) {
UIPageViewControllerTransitionStylePageCurl = 0, //
UIPageViewControllerTransitionStyleScroll = 1 // ScrollView
};
UIPageView Controller Transition StyleCurl 로 설정 하면 다음 그림 과 같이 페이지 넘 기기 효과 가 있 습 니 다.위 에서 초기 화 하 는 방법 중의 UIPageView Controller Navigation Orientation 속성 은 페이지 를 넘 기 는 방향 을 설정 합 니 다.다음 과 같 습 니 다.
typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationOrientation) {
UIPageViewControllerNavigationOrientationHorizontal = 0,//
UIPageViewControllerNavigationOrientationVertical = 1//
};
options 매개 변 수 는 페이지 넘 기기 컨트롤 러 의 설정 사전 을 설정 하 는 데 사 용 됩 니 다.설정 할 수 있 는 설정 키 는 다음 과 같 습 니 다.// UIPageViewControllerOptionSpineLocationKey NSNumber
NSString * const UIPageViewControllerOptionSpineLocationKey;
// NSNumber
NSString * const UIPageViewControllerOptionInterPageSpacingKey;
다음은 UIPageViewController 의 일반적인 속성 과 방법 입 니 다.//
@property (nullable, nonatomic, weak) id <UIPageViewControllerDelegate> delegate;
//
@property (nullable, nonatomic, weak) id <UIPageViewControllerDataSource> dataSource;
//
@property (nonatomic, readonly) UIPageViewControllerTransitionStyle transitionStyle;
//
@property (nonatomic, readonly) UIPageViewControllerNavigationOrientation navigationOrientation;
//
@property (nonatomic, readonly) UIPageViewControllerSpineLocation spineLocation;
//
@property (nonatomic, getter=isDoubleSided) BOOL doubleSided;
//
- (void)setViewControllers:(nullable NSArray<UIViewController *> *)viewControllers direction:(UIPageViewControllerNavigationDirection)direction animated:(BOOL)animated completion:(void (^ __nullable)(BOOL finished))completion;
위 에 spine Location 속성 만 이해 하기 어렵 고 다음 과 같다.typedef NS_ENUM(NSInteger, UIPageViewControllerSpineLocation) {
// SCrollView
UIPageViewControllerSpineLocationNone = 0,
// View
UIPageViewControllerSpineLocationMin = 1,
// View
UIPageViewControllerSpineLocationMid = 2,
// View
UIPageViewControllerSpineLocationMax = 3
};
위의 예제 코드 를 다음 과 같이 수정 합 니 다.- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_pageViewControl = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationVertical options:@{UIPageViewControllerOptionSpineLocationKey:@2,UIPageViewControllerOptionInterPageSpacingKey:@10}];
self.view.backgroundColor = [UIColor greenColor];
_pageViewControl.view.bounds=self.view.bounds;
_pageViewControl.dataSource=self;
_pageViewControl.delegate=self;
ModelViewController * model = [ModelViewController creatWithIndex:1];
ModelViewController * model2 = [ModelViewController creatWithIndex:2];
[_pageViewControl setViewControllers:@[model,model2] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];
_pageViewControl.doubleSided = YES;
_dataArray = [[NSMutableArray alloc]init];
[_dataArray addObject:model];
[self.view addSubview:_pageViewControl.view];
}
- (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{
return UIPageViewControllerSpineLocationMid;
}
운행 효 과 는 다음 그림 과 같다.4.UIPageViewController DataSource 에서 의 방법 분석
// ViewController
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
// ViewController
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
//
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0);
//
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0);
5.UIPageView Controller Delegate 에서 방법 분석//
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers NS_AVAILABLE_IOS(6_0);
//
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed;
// ,
- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.