Transcript
Page 1: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Построение интерфейсов(продолжение)

Контроллеры, сложные интерфейсы

Разработка под iOS

Лекция 3

Глеб Тарасов

Page 2: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Сложные контроллеры

Page 3: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UINavigationController

Page 4: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы
Page 5: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

ViewController *c = [[ViewController alloc] initWithNibName:@"ViewController"

bundle:nil];

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:self.viewController];

Page 6: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

- (IBAction)buttonTapped{ UIViewController *c = [[SubViewController alloc] initWithNibName:@"SubViewController" bundle:nil];

[self.navigationController pushViewController:c animated:YES];}

Page 7: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil

bundle:nibBundleOrNil]; if (self) { self.title = @"ViewController"; } return self;}

Page 8: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы
Page 9: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UITabBarController

Page 10: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы
Page 11: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

ViewController *c = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

SubViewController *s = [[SubViewController alloc] initWithNibName:@"SubViewController" bundle:nil]; UITabBarController *tc = [[UITabBarController alloc] init];

tc.viewControllers = [NSArray arrayWithObjects:c, s, nil];

Page 12: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil

bundle:nibBundleOrNil]; if (self) { self.title = @"ViewController"; self.tabBarItem.image = [UIImage imageNamed:@"1.png"]; } return self;}

Page 13: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы
Page 14: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UIPageViewController

Page 15: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

StoryBoard(демонстрация)

Page 16: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Варианты интерфейсов

Page 17: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

http://mobile-patterns.com

Page 18: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Tabs

Page 19: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Dashboard

Page 20: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UITableView + UINavigationController

Гид Покупок: Продукты

Page 21: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Widget

Клуб Любителей Аудиокниг

Page 22: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Нестандартные интерфейсы

News360

Page 23: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Распознавание жестов

Page 25: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UITapGestureRecognizerUITapGestureRecognizer *t = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped)];t.numberOfTapsRequired = 1;t.numberOfTouchesRequired = 1;[self.view addGestureRecognizer:t];

Page 26: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UIPanGestureRecognizerUIPanGestureRecognizer *p = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];[self.view addGestureRecognizer:p];

- (void)pan:(UIPanGestureRecognizer *)sender{ CGPoint t = [sender translationInView:self.view]; CGPoint v = [sender velocityInView:self.view]; NSLog(@"%@", NSStringFromCGPoint(t)); NSLog(@"%@", NSStringFromCGPoint(v));}

Page 27: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UIPinchGestureRecognizerUIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];[self.view addGestureRecognizer:pinch];

- (void)pinch:(UIPinchGestureRecognizer *)sender{ CGFloat scale = sender.scale; NSLog(@"%g", scale);}

Page 28: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UIRotationGestureRecognizerUIRotationGestureRecognizer *r = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];[self.view addGestureRecognizer:r];

- (void)rotate:(UIRotationGestureRecognizer *)sender{ CGFloat r = sender.rotation; NSLog(@"%g", r);}

Page 29: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

• UISwipeGestureRecognizer • UILongPressGestureRecognizer

UISwipeGestureRecognizer *s = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];s.direction = UISwipeGestureRecognizerDirectionLeft;[self.view addGestureRecognizer:s];

UILongPressGestureRecognizer *p = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];p.minimumPressDuration = 0.5;[self.view addGestureRecognizer:p];

Page 30: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UIGestureRecognizerDelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *)otherGestureRecognizer;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

Page 31: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

UIGestureRecognizerState

typedef enum { UIGestureRecognizerStatePossible,

UIGestureRecognizerStateBegan,

UIGestureRecognizerStateChanged,

UIGestureRecognizerStateEnded,

UIGestureRecognizerStateCancelled, UIGestureRecognizerStateFailed, UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded } UIGestureRecognizerState;

Page 32: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

Анимация

Page 33: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:0.5];

self.view.frame = CGRectMake(100, 100, 50, 50);

[UIView commitAnimations];

[UIView beginAnimations:nil context:nil];self.view.alpha = 0;[UIView commitAnimations];

Page 34: Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы

[UIView beginAnimations:nil context:nil];[UIView setAnimationDelegate:self];[UIView setAnimationDidStopSelector:@selector(animationFinished)];

self.view.alpha = 0;

[UIView commitAnimations];

- (void)animationFinished{ //...}