54
Поддержка iPad Разработка приложений для iOS Лекция 10 Глеб Тарасов [email protected]

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

  • Upload
    -

  • View
    384

  • Download
    10

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Поддержка iPad

Разработка приложений для iOS

Лекция 10

Глеб Тарасов[email protected]

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

Вспомним прошлое занятие

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

Как анимированно передвинуть view?

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

Как анимированно передвинуть view?

[UIView animateWithDuration:0.3 animations:^{ self.smallView.frame = ...; }];

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

Как последовательно запустить две анимации?

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

Как последовательно запустить две анимации?

[UIView animateWithDuration:0.3 animations:^{ // первая анимация } completion:^(BOOL finished) { [UIView animateWithDuration:0.3 animations:^{ // вторая анимация }]; }];

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

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

(например всех UILabel)

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

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

(например всех UILabel)

id a = [UILabel appearance]; [a setTextColor:[UIColor redColor]];

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

Приложения для iPad

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

Универсальные приложения

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

Способы организации

• все делаем из кода

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

• раздельные Storyboard на оба устройства, но контроллеры одни и те же

• полностью раздельные интерфейс: две Storyboard и разные контроллеры

• три Storyboard: одна только для iPhone, одна для iPad, одна для одинаковых интерфейсов

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

Проверка в кодеif (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { ... }

+ (BOOL)isIpad { return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); } !!!if ([Utils isIpad]) ...

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

Установка Storyboard

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

- (void)viewDidLoad { [super viewDidLoad]; if ([Utils isIpad]) { // подправляем интерфейс под iPad } }

Одна Storyboard

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

Две Storyboard, один контроллер

- (IBAction)buttonTapped { if ([Utils isIpad]) { // действие на iPad } else { // действие на iPhone } }

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

iPad-контроллер наследник iPhone

@interface ViewController_iPad : ViewController !@end !!!!!!- (IBAction)buttonTapped { ... }

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

Общий базовый контроллер

@interface ViewController_iPad : ViewController !@end !!!@interface ViewController_iPhone : ViewController !@end

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

Работа с несколькими Storyboard

@interface AppDelegate : UIResponder <UIApplicationDelegate> !+ (AppDelegate *)instance; !- (UIStoryboard *)iphoneStoryboard; - (UIStoryboard *)ipadStoryboard; - (UIStoryboard *)generalStoryboard; !@property (strong, nonatomic) UIWindow *window; !@end

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

+ (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

- (IBAction)buttonTapped { UIStoryboard *s = [AppDelegate instance].generalStoryboard; ! MenuViewController *m = [s instantiateViewControllerWithIdentifier:@"MenuViewController"]; ! [self presentViewController:m animated:YES completion:nil]; }

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

autosizing &

autolayouts

Page 26: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 27: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 28: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 29: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 30: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad

@implementation MyView !- (void)layoutSubviews { [super layoutSubviews]; ! ... } !@end

@interface MyView : UIView !@end

layoutSubviews

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

@implementation ViewController !- (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; ... } !- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; ... } !@end

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

- (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

Auto Layout

Page 34: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 35: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 36: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 37: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Page 38: Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad

Повороты экрана

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

@implementation ViewController !- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } !@end

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

Ориентация для UINavigationController

@interface CustomNavigationController : UINavigationController !@end

@implementation CustomNavigationController !- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } !@end

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

@implementation CustomNavigationController !- (NSUInteger)supportedInterfaceOrientations { return self.topViewController.supportedInterfaceOrientations; } !- (BOOL)shouldAutorotate { return self.topViewController.shouldAutorotate; } !@end

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

UISplitViewController

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

Чтобы показывать кнопку «Меню», надо обрабатывать UISplitViewControllerDelegate

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

UIPopoverController

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

Домашнее задание

• продумать интерфейс для iPad

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

• добавить поддержку iPad в наше приложение

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

Всё!

Глеб Тарасов [email protected] twitter.com/pilot34