34
Разработка приложений для iPhone и iPad занятие #4 вторник, 12 октября 2010 г.

Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

Embed Size (px)

Citation preview

Page 1: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

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

занятие #4

вторник, 12 октября 2010 г.

Page 2: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

feedback

вторник, 12 октября 2010 г.

Page 3: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

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

вторник, 12 октября 2010 г.

Page 4: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

результаты

• Шулюгин Владислав - 10

• Кабир Павел - 10

вторник, 12 октября 2010 г.

Page 5: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

а что было?

вторник, 12 октября 2010 г.

Page 6: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

события

• Срабатывают при действии пользователя• Посылает action у target

target: myObjectaction: @selector(decrease:)event: UIControlEventTouchUpInside

Пример:

[myControl addTarget:myObject action:@selector(decrease:)forControlEvents: UIControlEventTouchUpInside];

[myControl removeTarget:myObject action:@selector(decrease:)forControlEvents: UIControlEventTouchUpInside];

вторник, 12 октября 2010 г.

Page 7: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

view

• прямоугольная часть экрана• показывает и принимает события• view существуют в иерархии: один

superview, много subview

• все view показаны в window

• UIWindow - одно на всё приложение

вторник, 12 октября 2010 г.

Page 8: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

иерархия view

• [superView addSubview:view];

• [subView removeFromSuperview];

Либо в IB, либо программно:

Управление иерархией:

- (void)insertSubview:(UIView *)view atIndex:(int)index; - (void)insertSubview:(UIView *)view belowSubview:(UIView *)view; - (void)insertSubview:(UIView *)view aboveSubview:(UIView *)view;- (void)exchangeSubviewAtIndex:(int)index withSubviewAtIndex:(int)otherIndex;

вторник, 12 октября 2010 г.

Page 9: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

view

SuperView производит retain

theView.hidden = YES;

Контроль показа view

вторник, 12 октября 2010 г.

Page 10: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

структуры для view

• CGPoint место в пространстве+ { x , y }• CGSize размеры { width , height }• CGRect место и размеры { origin , size }

вторник, 12 октября 2010 г.

Page 11: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

Rects, Points and Sizes

CGSizeCGSize

width 144

height 72

CGRectCGRect

origin

size

CGPointCGPoint

x 80

y 54

72

144

80

54

(0, 0) x

y

11Tuesday, January 19, 2010

вторник, 12 октября 2010 г.

Page 12: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

работа со структурамиView-related Structure

Creation Function Example

CGPointMake (x, y)CGPoint point = CGPointMake (100.0, 200.0);point.x = 300.0;point.y = 30.0;

CGSizeMake (width, height)CGSize size = CGSizeMake (42.0, 11.0);size.width = 100.0;size.height = 72.0;

CGRectMake (x, y, width, height)

CGRect rect = CGRectMake (100.0, 200.0, 42.0, 11.0);rect.origin.x = 0.0;rect.size.width = 50.0;

12Tuesday, January 19, 2010

синтаксис!(), нет *

наследство от С

вторник, 12 октября 2010 г.

Page 13: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

система координат

UIView Coordinate System

+x

+y

0, 0

■ Origin in upper left corner■ y axis grows downwards

13Tuesday, January 19, 2010

вторник, 12 октября 2010 г.

Page 14: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

view

frame bounds

координатная система superview

локальная координатная система

используется при использовании view

используется при реализации view

вторник, 12 октября 2010 г.

Page 15: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

создаём view

CGRect frame = CGRectMake(20, 45, 140, 21); UILabel *label = [[UILabel alloc] initWithFrame:frame];[window addSubview:label]; [label setText:@”Привет всем!”]; [label release];

вторник, 12 октября 2010 г.

Page 16: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

дополнительные бонусы

UIColorUIColor *redColor = [UIColor redColor];[myLabel textColor] = redColor;

UIFontUIFont *font = [UIFont systemFontOfSize:14.0]; [myLabel setFont:font];

вторник, 12 октября 2010 г.

Page 17: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

UIImage и UIImageView Создание UIImage:из ресурсов: +[UIImage imageNamed:(NSString *)name]

с диска -[UIImage initWithContentsOfFile:(NSString *)path]

из памяти в виде данных -[UIImage initWithData:(NSData *)data]

UIImage *myImage = [UIImage imageNamed:@’‘oleg.jpg’’];CGRect frame = CGRectMake(20, 45, 140, 21); UIImageView *myImageView = [[UIImageView alloc] initWithFrame:frame];myImageView.image = myImage;[myImage release];

вторник, 12 октября 2010 г.

Page 18: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

простая анимация

-(IBAction)changeValue { [UIView beginAnimations:@"advancedAnimations" context:nil]; [UIView setAnimationDuration:0.5]; int value = slider.value; [label setText:[NSString stringWithFormat:@"%d",value]]; CGRect fr = label.frame; fr.origin.y += 40; label.frame = fr; [UIView commitAnimations];}

вторник, 12 октября 2010 г.

Page 19: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

посмотрим?

вторник, 12 октября 2010 г.

Page 20: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

дизайн приложений в iPhone

Two Flavors of Mail

5Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 21: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

сравниOrganizing Content

6Friday, January 22, 2010

Organizing Content

6Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 22: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

дизайн

• фокус на информацию пользователя

• один функционал единовременно

Organizing Content• Focus on your user’s data• One thing at a time• Screenfuls of content

6Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 23: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

функционал для управленияPatterns for Organizing Content

Navigation Bar Tab Bar

7Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 24: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

MVCParts of a Screenful

Model View

Controller

12Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 25: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

MVC в adress book

Model View

Parts of a Screenful

Controller

11Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 26: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

а зачемMVC?

вторник, 12 октября 2010 г.

Page 27: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

вторник, 12 октября 2010 г.

Page 28: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

Why Model-View-Controller?• Ever used the word “spaghetti” to describe code?• Clear responsibilities make things easier to maintain

• Avoid having one monster class that does everything

14Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 29: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

Взаимодейтсвие в MVC

• Model не знает про View и Controller, использует notification broadcast

• View не знает про Model и Controller, использует terget-action и делегацию

• Controller знает всех, «мозги» - управление, очень специфичный

вторник, 12 октября 2010 г.

Page 30: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

View Controller

• Управляет содержимым экрана

• Наследуй от UIViewController, чтобы определить свою логику

• Несколько ViewController-ов могут совмещаться

“Your” and “Our” View Controllers• Create your own UIViewController subclass for each screenful• Plug them together using existing composite view controllers

View Controller

View Controller

View Controller

NavigationController

25Friday, January 22, 2010

“Your” and “Our” View Controllers• Create your own UIViewController subclass for each screenful• Plug them together using existing composite view controllers

View Controller

View Controller

View Controller

Tab BarController

25Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 31: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

свой ViewController

#import <UIKit/UIKit.h>@interface MyViewController : UIViewController {NSMutableArray *myData; UILabel *myLabel;}

@property (readonly) NSArray *myData;- (void)doSomeAction:(id)sender;

view объявлен в UIViewController

в нашей реализации - loadView

Creating Your View in Code• Override -loadView

■ Never call this directly

• Create your views• Set the view property• Create view controller with -init

// Subclass of UIViewController- (void)loadView{

}

MyView *myView = [[MyView alloc] initWithFrame:frame];

[myView release];self.view = myView; // The view controller now owns the view

29Friday, January 22, 2010

вторник, 12 октября 2010 г.

Page 32: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

свой ViewController

- (void)loadView {MyView *myView = [[MyView alloc] initWithFrame:frame];self.view = myView; [myView release];}

вторник, 12 октября 2010 г.

Page 33: Четвертое занятие курса iOS-разработки в ГУ-ВШЭ

свой ViewController

• File - New File - View Controller

• автоматическое создание nib-файла

• создание нового объекта viewController при помощи -initWithNibName:bundle:

Creating Your View with Interface Builder• Lay out a view in Interface Builder• File’s owner is view controller class• Hook up view outlet• Create view controller

with -initWithNibName:bundle:

30Friday, January 22, 2010

вторник, 12 октября 2010 г.