Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Поддержка iPad
Разработка приложений для iOS
Лекция 10
Глеб Тарасов
gleb34@gmail.com
Вспомним прошлое
занятие
Как анимированно передвинуть
view?
Как анимированно передвинуть
view?
[UIView animateWithDuration:0.3 animations:^{
self.smallView.frame = ...;
}];
Как последовательно запустить
две анимации?
Как последовательно запустить
две анимации?
[UIView animateWithDuration:0.3
animations:^{
// первая анимация
}
completion:...
Как сразу изменить свойства всех
view данного типа?	

(например всех UILabel)
Как сразу изменить свойства всех
view данного типа?	

(например всех UILabel)
id a = [UILabel appearance];
[a setTextColor...
Приложения для iPad
Универсальные
приложения
Способы организации
• все делаем из кода	

• одна Storyboard на оба устройства	

• раздельные Storyboard на оба устройства...
Проверка в коде
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
...
}
+ (BOOL)isIpad
{
return (UI_USER_INTERFA...
Установка Storyboard
- (void)viewDidLoad
{
[super viewDidLoad];
if ([Utils isIpad])
{
// подправляем интерфейс под iPad
}
}
Одна Storyboard
Две Storyboard, один
контроллер
- (IBAction)buttonTapped
{
if ([Utils isIpad])
{
// действие на iPad
}
else
{
// действие ...
iPad-контроллер
наследник iPhone
@interface ViewController_iPad : ViewController
!
@end
!
!
!
!
!
!
- (IBAction)buttonTapp...
Общий базовый
контроллер
@interface ViewController_iPad : ViewController
!
@end
!
!
!
@interface ViewController_iPhone : V...
Работа с несколькими
Storyboard
@interface AppDelegate : UIResponder <UIApplicationDelegate>
!
+ (AppDelegate *)instance;
...
+ (AppDelegate *)instance
{
return [[UIApplication sharedApplication] delegate];
}
!
!
!
!
- (BOOL)application:(UIApplicat...
- (IBAction)buttonTapped
{
UIStoryboard *s = [AppDelegate instance].generalStoryboard;
!
MenuViewController *m = [s
instan...
autosizing 	

& 	

autolayouts
@implementation MyView
!
- (void)layoutSubviews
{
[super layoutSubviews];
!
...
}
!
@end
@interface MyView : UIView
!
@end...
@implementation ViewController
!
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
...
}
!
- (void)viewDidL...
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGRect frame = self.smallView.frame;
frame.origin.x = (self...
Auto Layout
Повороты экрана
@implementation ViewController
!
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape...
Ориентация для
UINavigationController
@interface CustomNavigationController : UINavigationController
!
@end
@implementatio...
@implementation CustomNavigationController
!
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController....
UISplitViewController
Чтобы показывать кнопку
«Меню», надо обрабатывать
UISplitViewControllerDelegate
UIPopoverController
Домашнее задание
• продумать интерфейс для iPad	

• продумать, каким способом проще всего
добавить поддержку iPad	

• доба...
Всё!
Глеб Тарасов	

gleb34@gmail.com	

twitter.com/pilot34
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Upcoming SlideShare
Loading in …5
×

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

556 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Интуит. Разработка приложений для 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

×