SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
Поддержка iPad
Разработка приложений для iOS
Лекция 10
Глеб Тарасов
gleb34@gmail.com
Вспомним прошлое
занятие
Как анимированно передвинуть
view?
Как анимированно передвинуть
view?
[UIView animateWithDuration:0.3 animations:^{
self.smallView.frame = ...;
}];
Как последовательно запустить
две анимации?
Как последовательно запустить
две анимации?
[UIView animateWithDuration:0.3
animations:^{
// первая анимация
}
completion:^(BOOL finished) {
[UIView animateWithDuration:0.3 animations:^{
// вторая анимация
}];
}];
Как сразу изменить свойства всех
view данного типа?	

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

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

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

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

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

• три Storyboard: одна только для iPhone,
одна для iPad, одна для одинаковых
интерфейсов
Проверка в коде
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
...
}
+ (BOOL)isIpad
{
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
}
!
!
!
if ([Utils isIpad]) ...
Установка Storyboard
- (void)viewDidLoad
{
[super viewDidLoad];
if ([Utils isIpad])
{
// подправляем интерфейс под iPad
}
}
Одна Storyboard
Две Storyboard, один
контроллер
- (IBAction)buttonTapped
{
if ([Utils isIpad])
{
// действие на iPad
}
else
{
// действие на iPhone
}
}
iPad-контроллер
наследник iPhone
@interface ViewController_iPad : ViewController
!
@end
!
!
!
!
!
!
- (IBAction)buttonTapped
{
...
}
Общий базовый
контроллер
@interface ViewController_iPad : ViewController
!
@end
!
!
!
@interface ViewController_iPhone : ViewController
!
@end
Работа с несколькими
Storyboard
@interface AppDelegate : UIResponder <UIApplicationDelegate>
!
+ (AppDelegate *)instance;
!
- (UIStoryboard *)iphoneStoryboard;
- (UIStoryboard *)ipadStoryboard;
- (UIStoryboard *)generalStoryboard;
!
@property (strong, nonatomic) UIWindow *window;
!
@end
+ (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;
}
- (IBAction)buttonTapped
{
UIStoryboard *s = [AppDelegate instance].generalStoryboard;
!
MenuViewController *m = [s
instantiateViewControllerWithIdentifier:@"MenuViewController"];
!
[self presentViewController:m animated:YES completion:nil];
}
autosizing 	

& 	

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

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

• добавить поддержку iPad в наше
приложение
Всё!
Глеб Тарасов	

gleb34@gmail.com	

twitter.com/pilot34

Contenu connexe

Plus de Глеб Тарасов

Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Глеб Тарасов
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect Глеб Тарасов
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation InstituteГлеб Тарасов
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsГлеб Тарасов
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеГлеб Тарасов
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 

Plus de Глеб Тарасов (20)

Gleb Tarasov. Portfolio
Gleb Tarasov. PortfolioGleb Tarasov. Portfolio
Gleb Tarasov. Portfolio
 
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. Views
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation Institute
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPods
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
ShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev MeetupShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev Meetup
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. Портфолио
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 

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