Top Banner
Нестандартные интерфейсы Сергей Гаврилюк Senior iOS developer 24.06.2011 1 Примеры реализации Friday, July 1, 11
28

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

May 08, 2015

Download

Technology

SoftTechnics
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: нестандартные интерфейсы iOS

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

Сергей ГаврилюкSenior iOS developer

24.06.2011

1

Примеры реализации

Friday, July 1, 11

Page 2: нестандартные интерфейсы iOS

Используйте стандартный интерфейс

2

Friday, July 1, 11

Page 3: нестандартные интерфейсы iOS

Когда нужен нестандартный интерфейс

• отсутствие необходимых компонентов

• impression

3

Friday, July 1, 11

Page 4: нестандартные интерфейсы iOS

Организация элементов интерфейса в  iOS

UIView

4

Friday, July 1, 11

Page 5: нестандартные интерфейсы iOS

Организация элементов интерфейса в  iOS

UIView UIControl-derived

4

Friday, July 1, 11

Page 6: нестандартные интерфейсы iOS

Организация элементов интерфейса в  iOS

UIView UIControl-derived

UIView based complex views

4

Friday, July 1, 11

Page 7: нестандартные интерфейсы iOS

Организация элементов интерфейса в  iOS

UIView

UIViewController

События:•appearance•rotation•memory warning•custom notifications

Отоброжение

5

Friday, July 1, 11

Page 8: нестандартные интерфейсы iOS

Организация элементов интерфейса в  iOS

UIView

UIViewController

События:•appearance•rotation•memory warning•custom notifications

Отоброжение

UINavigationController

UITabBarController

5

Friday, July 1, 11

Page 9: нестандартные интерфейсы iOS

Наследование UIControl

Состояние (значение)

Отображение Изменение

6

Friday, July 1, 11

Page 10: нестандартные интерфейсы iOS

Наследование UIControl

Состояние (значение)

Отображение Изменение

•Интерфейс класса•Отображение•Обработка touch событий

6

Friday, July 1, 11

Page 11: нестандартные интерфейсы iOS

Обработка touch событий

beginTrackingWithTouch:withEvent:

continueTrackingWithTouch:withEvent:

endTrackingWithTouch:withEvent:

7

Friday, July 1, 11

Page 12: нестандартные интерфейсы iOS

Demo

8

Friday, July 1, 11

Page 13: нестандартные интерфейсы iOS

STKnobControl

•Каждому состоянию (значению) соответствует одно из 128 пререндерных изображения

-(void) updateValuePresentation{ fKnobView.image = [UIImage imageNamed: [NSString stringWithFormat:@"Handle_%04d.png",

127-fCurrentValue]]; }

9

Friday, July 1, 11

Page 14: нестандартные интерфейсы iOS

STKnobControl•При обработке touch событий используется полярная система коордиант и учитывается только угол поворота...

! ! CGPoint currentPoint = [touch locationInView:self];! ! CGFloat currentX = (currentPoint.x - fKnobView.center.x);! ! CGFloat currentY = -(currentPoint.y - fKnobView.center.y);! ! CGFloat currentR = sqrt(currentX*currentX + currentY*currentY);! ! CGFloat currentAngle = asin(currentY/currentR);

...! ! CGPoint prevPoint = [touch previousLocationInView:self];! ! CGFloat prevX = (prevPoint.x - fKnobView.center.x);! ! CGFloat prevY = -(prevPoint.y - fKnobView.center.y);! !! ! CGFloat prevR = sqrt(prevX*prevX + prevY*prevY);! !! ! CGFloat prevAngle = asin(prevY/prevR);

...CGFloat angleDistance = (prevAngle-currentAngle);

10

Friday, July 1, 11

Page 15: нестандартные интерфейсы iOS

STKnobControl•При обработке touch событий используется полярная система коордиант и учитывается только угол поворота

NSInteger newValue = ceil((fCurrentAbsoluteAngle + angleDistance + 5*M_PI/6)*127/(5*M_PI/3));

10

Friday, July 1, 11

Page 16: нестандартные интерфейсы iOS

STKnobControl

•При изменении значения генерируется событие ValueChanged

...fCurrentValue = newValue;fCurrentAbsoluteAngle += angleDistance;[self updateValuePresentation];[self sendActionsForControlEvents:UIControlEventValueChanged];...

11

Friday, July 1, 11

Page 17: нестандартные интерфейсы iOS

SOSlider

•Набор состояний задается массивом строк

-(id) initWithStates:(NSArray*) states{! if((self = [super init])!= nil)! {! ! [self commonInit];! ! [self setStates:states];! }! return self;}

12

Friday, July 1, 11

Page 18: нестандартные интерфейсы iOS

SOSlider•После получения события endTracking ползунок “магнитится” в ближайшее дискретное состояние

-(void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{! CGFloat labelWidth = (self.frame.size.width-2)/(CGFloat)[fStates count];! NSInteger oldStateIndex = fCurrentState;!! fCurrentState = MIN(round(fKnobView.frame.origin.x/labelWidth), [fStates count]-1);!! [UIView beginAnimations:nil context:nil];! [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];!! fKnobView.frame = CGRectMake(1+ceil(fCurrentState*labelWidth), 1, labelWidth, self.frame.size.width-2);! [UIView commitAnimations];! ...}

13

Friday, July 1, 11

Page 19: нестандартные интерфейсы iOS

SOSlider

•Текст на ползунке меняется при изменении состояния

fKnobLabel.text = [(NSDictionary*)[fStates objectAtIndex:fCurrentState] objectForKey:@"name"];

CATransition* transiotion = [CATransition animation];transiotion.type = kCATransitionFade;[fKnobLabel.layer addAnimation:transiotion forKey:nil];

14

Friday, July 1, 11

Page 20: нестандартные интерфейсы iOS

SOSlider

•После изменения состояния генерируется событие ValueChanged

! if(oldStateIndex != fCurrentState)! ! [self sendActionsForControlEvents:UIControlEventValueChanged];

15

Friday, July 1, 11

Page 21: нестандартные интерфейсы iOS

Навигационный ViewController

• хранение пользовательских ViewControllers

• Пересылка UIViewController-related событий

• Навигацонный интерфейс для пользователя

• Transitions при переключениях между ViewControllers

16

Friday, July 1, 11

Page 22: нестандартные интерфейсы iOS

Demo

17

Friday, July 1, 11

Page 23: нестандартные интерфейсы iOS

Navigation

Собственная реализация NavigationBar

18

Friday, July 1, 11

Page 24: нестандартные интерфейсы iOS

Navigation

Стандартная функциональность UINavigationController:

PushPop

SetViewControllers

Animated:Yes/No

18

Friday, July 1, 11

Page 25: нестандартные интерфейсы iOS

Navigation

Все transition эффекты полностью идентичны стандартным в

UINavigationController

18

Friday, July 1, 11

Page 26: нестандартные интерфейсы iOS

TabBarController

Собственная реализация TabBar

• Эффект увеличения иконки активного таба

• Эффект перемещения иконки активного таба в центр

19

Friday, July 1, 11

Page 27: нестандартные интерфейсы iOS

TabBarController

При переключении табов используется push transition эффект в соответствии с

индексами переключаемых контроллеров в их массиве

19

Friday, July 1, 11

Page 28: нестандартные интерфейсы iOS

Спасибо за внимание

Сергей ГаврилюкSenior iOS [email protected]

20

Reference:git://github.com/softtechnics/UIControlsDemo.gitgit://github.com/softtechnics/NavigationControllerDemo.gitgit://github.com/softtechnics/TabBarControllerDemo.git

Friday, July 1, 11