Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad

426 views
367 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
426
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad

  1. 1. Поддержка iPad Разработка приложений для iOS Лекция 10 Глеб Тарасов gleb34@gmail.com
  2. 2. Вспомним прошлое занятие
  3. 3. Как анимированно передвинуть view?
  4. 4. Как анимированно передвинуть view? [UIView animateWithDuration:0.3 animations:^{ self.smallView.frame = ...; }];
  5. 5. Как последовательно запустить две анимации?
  6. 6. Как последовательно запустить две анимации? [UIView animateWithDuration:0.3 animations:^{ // первая анимация } completion:^(BOOL finished) { [UIView animateWithDuration:0.3 animations:^{ // вторая анимация }]; }];
  7. 7. Как сразу изменить свойства всех view данного типа? (например всех UILabel)
  8. 8. Как сразу изменить свойства всех view данного типа? (например всех UILabel) id a = [UILabel appearance]; [a setTextColor:[UIColor redColor]];
  9. 9. Приложения для iPad
  10. 10. Универсальные приложения
  11. 11. Способы организации • все делаем из кода • одна Storyboard на оба устройства • раздельные Storyboard на оба устройства, но контроллеры одни и те же • полностью раздельные интерфейс: две Storyboard и разные контроллеры • три Storyboard: одна только для iPhone, одна для iPad, одна для одинаковых интерфейсов
  12. 12. Проверка в коде if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { ... } + (BOOL)isIpad { return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); } ! ! ! if ([Utils isIpad]) ...
  13. 13. Установка Storyboard
  14. 14. - (void)viewDidLoad { [super viewDidLoad]; if ([Utils isIpad]) { // подправляем интерфейс под iPad } } Одна Storyboard
  15. 15. Две Storyboard, один контроллер - (IBAction)buttonTapped { if ([Utils isIpad]) { // действие на iPad } else { // действие на iPhone } }
  16. 16. iPad-контроллер наследник iPhone @interface ViewController_iPad : ViewController ! @end ! ! ! ! ! ! - (IBAction)buttonTapped { ... }
  17. 17. Общий базовый контроллер @interface ViewController_iPad : ViewController ! @end ! ! ! @interface ViewController_iPhone : ViewController ! @end
  18. 18. Работа с несколькими Storyboard @interface AppDelegate : UIResponder <UIApplicationDelegate> ! + (AppDelegate *)instance; ! - (UIStoryboard *)iphoneStoryboard; - (UIStoryboard *)ipadStoryboard; - (UIStoryboard *)generalStoryboard; ! @property (strong, nonatomic) UIWindow *window; ! @end
  19. 19. + (AppDelegate *)instance { return [[UIApplication sharedApplication] delegate]; } ! ! ! ! - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.iphoneStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; self.ipadStoryboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil]; self.generalStoryboard = [UIStoryboard storyboardWithName:@"General" bundle:nil]; return YES; }
  20. 20. - (IBAction)buttonTapped { UIStoryboard *s = [AppDelegate instance].generalStoryboard; ! MenuViewController *m = [s instantiateViewControllerWithIdentifier:@"MenuViewController"]; ! [self presentViewController:m animated:YES completion:nil]; }
  21. 21. autosizing & autolayouts
  22. 22. @implementation MyView ! - (void)layoutSubviews { [super layoutSubviews]; ! ... } ! @end @interface MyView : UIView ! @end layoutSubviews
  23. 23. @implementation ViewController ! - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; ... } ! - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; ... } ! @end
  24. 24. - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; CGRect frame = self.smallView.frame; frame.origin.x = (self.view.frame.size.width - frame.size.width) / 2; frame.origin.y = (self.view.frame.size.height - frame.size.height) / 2; self.smallView.frame = frame; }
  25. 25. Auto Layout
  26. 26. Повороты экрана
  27. 27. @implementation ViewController ! - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } ! @end
  28. 28. Ориентация для UINavigationController @interface CustomNavigationController : UINavigationController ! @end @implementation CustomNavigationController ! - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } ! @end
  29. 29. @implementation CustomNavigationController ! - (NSUInteger)supportedInterfaceOrientations { return self.topViewController.supportedInterfaceOrientations; } ! - (BOOL)shouldAutorotate { return self.topViewController.shouldAutorotate; } ! @end
  30. 30. UISplitViewController
  31. 31. Чтобы показывать кнопку «Меню», надо обрабатывать UISplitViewControllerDelegate
  32. 32. UIPopoverController
  33. 33. Домашнее задание • продумать интерфейс для iPad • продумать, каким способом проще всего добавить поддержку iPad • добавить поддержку iPad в наше приложение
  34. 34. Всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34

×