Интуит. Разработка приложений для ios. Лекция 10....
DESCRIPTION
TRANSCRIPT
![Page 2: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/2.jpg)
Вспомним прошлое занятие
![Page 3: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/3.jpg)
Как анимированно передвинуть view?
![Page 4: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/4.jpg)
Как анимированно передвинуть view?
[UIView animateWithDuration:0.3 animations:^{ self.smallView.frame = ...; }];
![Page 5: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/5.jpg)
Как последовательно запустить две анимации?
![Page 6: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/6.jpg)
Как последовательно запустить две анимации?
[UIView animateWithDuration:0.3 animations:^{ // первая анимация } completion:^(BOOL finished) { [UIView animateWithDuration:0.3 animations:^{ // вторая анимация }]; }];
![Page 7: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/7.jpg)
Как сразу изменить свойства всех view данного типа?
(например всех UILabel)
![Page 8: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/8.jpg)
Как сразу изменить свойства всех view данного типа?
(например всех UILabel)
id a = [UILabel appearance]; [a setTextColor:[UIColor redColor]];
![Page 9: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/9.jpg)
Приложения для iPad
![Page 10: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/10.jpg)
![Page 11: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/11.jpg)
![Page 12: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/12.jpg)
Универсальные приложения
![Page 13: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/13.jpg)
![Page 14: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/14.jpg)
Способы организации
• все делаем из кода
• одна Storyboard на оба устройства
• раздельные Storyboard на оба устройства, но контроллеры одни и те же
• полностью раздельные интерфейс: две Storyboard и разные контроллеры
• три Storyboard: одна только для iPhone, одна для iPad, одна для одинаковых интерфейсов
![Page 15: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/15.jpg)
Проверка в кодеif (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { ... }
+ (BOOL)isIpad { return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); } !!!if ([Utils isIpad]) ...
![Page 16: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/16.jpg)
Установка Storyboard
![Page 17: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/17.jpg)
- (void)viewDidLoad { [super viewDidLoad]; if ([Utils isIpad]) { // подправляем интерфейс под iPad } }
Одна Storyboard
![Page 18: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/18.jpg)
Две Storyboard, один контроллер
- (IBAction)buttonTapped { if ([Utils isIpad]) { // действие на iPad } else { // действие на iPhone } }
![Page 19: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/19.jpg)
iPad-контроллер наследник iPhone
@interface ViewController_iPad : ViewController !@end !!!!!!- (IBAction)buttonTapped { ... }
![Page 20: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/20.jpg)
Общий базовый контроллер
@interface ViewController_iPad : ViewController !@end !!!@interface ViewController_iPhone : ViewController !@end
![Page 21: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/21.jpg)
Работа с несколькими Storyboard
@interface AppDelegate : UIResponder <UIApplicationDelegate> !+ (AppDelegate *)instance; !- (UIStoryboard *)iphoneStoryboard; - (UIStoryboard *)ipadStoryboard; - (UIStoryboard *)generalStoryboard; !@property (strong, nonatomic) UIWindow *window; !@end
![Page 22: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/22.jpg)
+ (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; }
![Page 23: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/23.jpg)
- (IBAction)buttonTapped { UIStoryboard *s = [AppDelegate instance].generalStoryboard; ! MenuViewController *m = [s instantiateViewControllerWithIdentifier:@"MenuViewController"]; ! [self presentViewController:m animated:YES completion:nil]; }
![Page 24: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/24.jpg)
![Page 25: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/25.jpg)
autosizing &
autolayouts
![Page 26: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/26.jpg)
![Page 27: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/27.jpg)
![Page 28: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/28.jpg)
![Page 29: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/29.jpg)
![Page 30: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/30.jpg)
@implementation MyView !- (void)layoutSubviews { [super layoutSubviews]; ! ... } !@end
@interface MyView : UIView !@end
layoutSubviews
![Page 31: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/31.jpg)
@implementation ViewController !- (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; ... } !- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; ... } !@end
![Page 32: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/32.jpg)
- (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; }
![Page 33: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/33.jpg)
Auto Layout
![Page 34: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/34.jpg)
![Page 35: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/35.jpg)
![Page 36: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/36.jpg)
![Page 37: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/37.jpg)
![Page 38: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/38.jpg)
Повороты экрана
![Page 39: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/39.jpg)
![Page 40: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/40.jpg)
@implementation ViewController !- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } !@end
![Page 41: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/41.jpg)
Ориентация для UINavigationController
@interface CustomNavigationController : UINavigationController !@end
@implementation CustomNavigationController !- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } !@end
![Page 42: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/42.jpg)
![Page 43: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/43.jpg)
@implementation CustomNavigationController !- (NSUInteger)supportedInterfaceOrientations { return self.topViewController.supportedInterfaceOrientations; } !- (BOOL)shouldAutorotate { return self.topViewController.shouldAutorotate; } !@end
![Page 44: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/44.jpg)
![Page 45: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/45.jpg)
![Page 46: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/46.jpg)
UISplitViewController
![Page 47: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/47.jpg)
![Page 48: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/48.jpg)
![Page 49: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/49.jpg)
Чтобы показывать кнопку «Меню», надо обрабатывать UISplitViewControllerDelegate
![Page 50: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/50.jpg)
UIPopoverController
![Page 51: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/51.jpg)
![Page 52: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/52.jpg)
![Page 53: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad](https://reader031.vdocuments.pub/reader031/viewer/2022013114/548051e0b37959822b8b5a73/html5/thumbnails/53.jpg)
Домашнее задание
• продумать интерфейс для iPad
• продумать, каким способом проще всего добавить поддержку iPad
• добавить поддержку iPad в наше приложение