#xcode
#xcode
Вопрос:
Я хочу создать приложение для iPhone, но теперь мне нужно, как вы можете переключать просмотры, переворачивая страницу, как iBooks в книге, я видел в Интернете, что с помощью UIPageViewController вы можете сделать это в Xcode 4.2 на iOS 5,
Спасибо, Гарри
Ответ №1:
Создайте новый проект типа Single View Application, назовите его BookEffect, снимите флажок Использовать раскадровки, снимите флажок Включать модульные тесты, но обязательно установите флажок Использовать автоматический подсчет ссылок.
Затем добавьте в проект несколько изображений, например, в формате JPEG.
Создайте новый файл — используйте шаблон класса Objective-C с подклассом UIViewController, выберите опцию с XIB для пользовательского интерфейса и назовите его SinglePageViewController. Сохраните файл в папке BookEffect.
После добавления выберите SinglePageViewController.xib и добавьте в представление элементы управления UILabel и UIImageView и установите соответствующие подключения к владельцу файла.
Измените SinglePageViewController.h, чтобы он выглядел следующим образом:
#import <UIKit/UIKit.h>
@interface SinglePageViewController : UIViewController
{
NSUInteger pageNumber;
}
@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@property (strong, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic, assign) NSUInteger pageNumber;
- (void) setPageNumber: (NSUInteger) newPageNumber;
- (NSUInteger) pageNumber;
@end
В SinglePageViewController.m добавить:
@synthesize imageView, titleLabel;
и добавьте эти определения методов:
- (void) setPageNumber: (NSUInteger) newPageNumber{
pageNumber = newPageNumber;
}
- (NSUInteger) pageNumber{
return pageNumber;
}
- (void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[titleLabel setText:[NSString stringWithFormat:@"Page %d", pageNumber]];
NSArray *images = [[NSBundle mainBundle] pathsForResourcesOfType:@".jpg" inDirectory:nil];
UIImage *img = [UIImage imageWithContentsOfFile:[images objectAtIndex:pageNumber-1]];
[imageView setImage:img];
}
Теперь перейдите к BookEffecViewController.h и сделайте так, чтобы это выглядело так:
#import <UIKit/UIKit.h>
#import "SinglePageViewController.h"
@interface BookEffectViewController : UIViewController
<UIPageViewControllerDataSource>
@property( nonatomic, strong) UIPageViewController *pageViewController;
@end
В BookEffectViewController.m измените viewDidLoad, чтобы он выглядел следующим образом:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageViewController.dataSource = self;
SinglePageViewController *singlePage = [[SinglePageViewController alloc] initWithNibName:@"SinglePageViewController" bundle:nil];
[singlePage setPageNumber:1];
NSArray *controllers = [[NSArray alloc] initWithObjects:singlePage, nil];
[self.pageViewController setViewControllers:controllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
self.pageViewController.view.frame = self.view.bounds;
}
Определите еще два метода в BookEffectViewController.m:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger previousPageNumber = [((SinglePageViewController*)viewController) pageNumber];
if ( previousPageNumber == 1 ) {
return nil;
}
else{
SinglePageViewController *singlePage = [[SinglePageViewController alloc] initWithNibName:@"SinglePageViewController" bundle:nil];
[singlePage setPageNumber:previousPageNumber-1];
return singlePage;
}
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger previousPageNumber = [((SinglePageViewController*)viewController) pageNumber];
if ( previousPageNumber >= [[[NSBundle mainBundle] pathsForResourcesOfType:@".jpg" inDirectory:nil] count] ) {
return nil;
}
else{
SinglePageViewController *singlePage = [[SinglePageViewController alloc] initWithNibName:@"SinglePageViewController" bundle:nil];
[singlePage setPageNumber:previousPageNumber 1];
return singlePage;
}
}
Вот и все. Команда-R для тестирования с помощью симулятора iPad
Это базовая оболочка, и другие навороты могут быть добавлены для вашего собственного удовольствия, т. Е. удалить номер страницы, добавить заголовок и т.д.
Надеюсь, это помогло.
Ответ №2:
Начните с шаблона проекта на основе просмотра страниц в Xcode и взгляните на setViewControllers:direction:animated:completion:
метод.
Комментарии:
1. Привет, Роб, я новичок в разработке приложений, поэтому не могли бы вы рассказать об этом более подробно? Спасибо