Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение

2,030 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,030
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
48
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение

  1. 1. Разработка приложений для iOS Лекция 3 Интерфейсы, продолжение Глеб Тарасов
  2. 2. Сложныеконтроллеры
  3. 3. UINavigationController
  4. 4. ViewController *c = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:c];
  5. 5. - (IBAction)buttonTapped{ UIViewController *c = [[SubViewController alloc] initWithNibName:@"SubViewController" bundle:nil]; [self.navigationController pushViewController:c animated:YES];}
  6. 6. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = @"ViewController"; } return self;}
  7. 7. UITabBarController
  8. 8. 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];
  9. 9. - (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;}
  10. 10. UIPageViewController
  11. 11. Модальный контроллерViewController *v = [[ViewController alloc] init];[self presentModalViewController:v animated:YES];[self dismissModalViewControllerAnimated:YES];
  12. 12. StoryBoard(демонстрация)
  13. 13. Модальные View
  14. 14. UIAlertViewUIAlertView *a = [[UIAlertView alloc] initWithTitle:@"test" message:@"message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[a show];
  15. 15. UIAlertView- (void)viewDidLoad{ UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"test" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"1", @"2", nil]; [a show];}- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ NSLog(@"%d", buttonIndex);}
  16. 16. UIActionSheet
  17. 17. UIActionSheet- (void)viewDidLoad{ UIActionSheet *s = [[UIActionSheet alloc] initWithTitle:@"test" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:@"One", @"Two", nil]; [s showInView:self.view];}- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ NSLog(@"button %d", buttonIndex);}
  18. 18. Вариантыинтерфейсов
  19. 19. http://mobile-patterns.com
  20. 20. Tabs
  21. 21. Dashboard
  22. 22. UITableView + UINavigationController Гид Покупок: Продукты
  23. 23. Widget Клуб Любителей Аудиокниг
  24. 24. Нестандартные интерфейсы News360
  25. 25. Распознавание жестов
  26. 26. UIGestureRecognizerUIView:- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
  27. 27. UITapGestureRecognizerUITapGestureRecognizer *t = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped)];t.numberOfTapsRequired = 1;t.numberOfTouchesRequired = 1;[self.view addGestureRecognizer:t];
  28. 28. 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));}
  29. 29. UIPinchGestureRecognizerUIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];[self.view addGestureRecognizer:pinch]; - (void)pinch:(UIPinchGestureRecognizer *)sender { CGFloat scale = sender.scale; NSLog(@"%g", scale); }
  30. 30. UIRotationGestureRecognizerUIRotationGestureRecognizer *r = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];[self.view addGestureRecognizer:r]; - (void)rotate:(UIRotationGestureRecognizer *)sender { CGFloat r = sender.rotation; NSLog(@"%g", r); }
  31. 31. UISwipeGestureRecognizer *s = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; s.direction = UISwipeGestureRecognizerDirectionLeft; [self.view addGestureRecognizer:s];• UISwipeGestureRecognizer• UILongPressGestureRecognizerUILongPressGestureRecognizer *p = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];p.minimumPressDuration = 0.5;[self.view addGestureRecognizer:p];
  32. 32. UIGestureRecognizerDelegate- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldReceiveTouch:(UITouch *)touch;
  33. 33. UIGestureRecognizerStatetypedef enum { UIGestureRecognizerStatePossible, UIGestureRecognizerStateBegan, UIGestureRecognizerStateChanged, UIGestureRecognizerStateEnded, UIGestureRecognizerStateCancelled, UIGestureRecognizerStateFailed, UIGestureRecognizerStateRecognized =UIGestureRecognizerStateEnded} UIGestureRecognizerState;
  34. 34. Анимация
  35. 35. [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];
  36. 36. [UIView beginAnimations:nil context:nil];[UIView setAnimationDelegate:self];[UIView setAnimationDidStopSelector:@selector(animationFinished)];self.view.alpha = 0;[UIView commitAnimations];- (void)animationFinished{ //...}
  37. 37. The following properties of the UIView class areanimatable:@property frame@property bounds@property center@property transform@property alpha@property backgroundColor@property contentStretch
  38. 38. Блокиvoid(^b)(void) = ^{ NSLog(@"test");};b();NSInteger(^c)(CGFloat, NSString *) = ^(CGFloat p, NSString *s){ NSLog(@"test %g %@", p, s); return 10;};NSInteger q = c(10.5, @"abc");
  39. 39. Циклы ссылокtypedef void(^BasicBlock)(void);…@property(copy, nonatomic) BasicBlock block;…self.block = ^{ [self updateWithQuestion];};__weak ViewController *s = self;self.block = ^{ [s updateWithQuestion];};
  40. 40. Захват переменных __block NSInteger q = 123; BasicBlock b = ^{ ++q; NSLog(@"%d", q); }; b(); // 124 b(); // 125
  41. 41. Анимация с блоками[UIView animateWithDuration:0.3 animations:^{ self.view.alpha = 0;}];[UIView animateWithDuration:0.3 animations:^{ self.view.alpha = 1; } completion:^(BOOL finished) { NSLog(@"animation finished"); }];
  42. 42. Удобства с блоками [BlockAlertView showTitle:@"Ошибка" text:@"Для изменения личных данных необходимо подключение к интернету." cancelButton:@"ОК" action:^{ [s.navigationController dismissModalViewControllerAnimated:YES]; }];DDXMLElement *style = [[img.attributes where:^BOOL(id element) { DDXMLNode *attr = element; return [attr.name isEqualToString:@"style"];}] firstObject];BlockTapGestureRecognizer *tap = [[BlockTapGestureRecognizer alloc] initWithAction:^{ [self dismissModalViewControllerAnimated:YES];}];[self.view addGestureRecognizer:tap];
  43. 43. Демонстрация
  44. 44. Примеры интерфейсовиз живых приложений
  45. 45. Кастомный navBar
  46. 46. Несколько navBar items
  47. 47. Кастомный tabBar
  48. 48. Произвольный tabBar
  49. 49. Rich text
  50. 50. Вопросы
  51. 51. Что нужно сделать, чтобыраспознать нажатие на UIView?
  52. 52. Что нужно сделать, чтобы распознать нажатие на UIView? Создать UITapGestureRecognizer,добавить его через addGestureRecognizer.
  53. 53. Как по нажатию на кнопку анимированно передвинуть эту кнопку в другой угол экрана, а в конце анимации изменить ее цвет?
  54. 54. Как по нажатию на кнопку анимированно передвинуть эту кнопку в другой угол экрана, а в конце анимации изменить ее цвет? С помощью метода UIView animateWithDuration. В блоке анимации изменить фрейм, в блоке completion изменить цвет.
  55. 55. Как во всем приложении поменять фон у UINavigationBar?
  56. 56. Как во всем приложении поменять фон у UINavigationBar? Для iOS5 достаточно воспользоваться статическим свойством appearance у UINavigationBar.Для iOS4 надо создать категорию и подменить метод - (void)drawRect:(CGRect)rect
  57. 57. Задание • два таба • список городов из файла • при выборе строки: карта с указанием на этот город • список сайтов из файла • при выборе строки: страница в webView с этим сайтомНа всех экранах:Кнопка «Инфо», по нажатию alert с вопросом «да/нет». Если да - открываетсяmodalViewController c текстом «об авторе»
  58. 58. Спасибо Глеб Тарасов gleb34@gmail.com twitter.com/pilot34

×