2017-08-12 02 Антон Ковалев. texture a.k.a asyncdisplaykit

34
a.k.a AsyncDisplayKit Ковалев Антон iOS разработчик, Rosberry Texture

Upload: -

Post on 28-Jan-2018

156 views

Category:

Education


4 download

TRANSCRIPT

Page 1: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

a.k.a AsyncDisplayKit

Ковалев АнтонiOS разработчик, Rosberry

Texture

Page 2: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

2

Demo

Page 3: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Lorem ipsum dolor sit amet, consectetur

adipiscing elit. Maecenas tincidunt

tempor lorem, non dapibus dui dapibus

vitae.

UI в iOS

3

Page 4: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

UI в iOSЧастота обновления экрана 60 FPSТеоретическое время отрисовки кадра = 1/60 (16мс)Фактическое время ~10мс

4

Main thread16мс0мс 32мс 48мс 64мс 80мс 96мс

Page 5: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Frame drops

5

Page 6: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

AsyncDisplayKit

6

Main thread

Background thread

Background thread

Background thread

Main thread

Page 7: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

AsyncDisplayKit

7

Page 8: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Основной принцип работы

8

.delegate

.layerView Layer

Main thread only

.delegate

.layerView Layer

Main thread only

.node

.viewNode

Asynchronous

Page 9: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Nodes

9

Page 10: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Node containersASCollectionNode ASPagerNode ASTableNode ASViewController ASNavigationController ASTabBarController

10

Page 11: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Intelligent preloading

11

Page 12: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Layout engineОснован на модели CSS Flexbox

Основные понятия:• Layout Specs• Layout Elements

12

Page 13: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

ASStackLayoutSpec

13

Page 14: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

ASInsetLayoutSpec

14

Page 15: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

ASOverlayLayoutSpec/ASBackgroundLayoutSpec

15

Page 16: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

ASCenterLayoutSpec

16

Page 17: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

ASRatioLayoutSpec

17

Page 18: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Layout engine

18

Page 19: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Layout engine

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize {

return ...;

}

19

Page 20: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Layout engine

-----------------------ASStackLayoutSpec----------------------

| -----ASStackLayoutSpec----- -----ASStackLayoutSpec----- |

| | ASImageNode | | ASImageNode | |

| | ASImageNode | | ASImageNode | |

| --------------------------- --------------------------- |

--------------------------------------------------------------

20

Page 21: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Layout engine Sizing// Relative (%) ASDimensionMake(@"50%"); ASDimensionMakeWithFraction(0.5);

// Absolute ASDimensionMake(@"70pt") ASDimensionMake(70); ASDimensionMakeWithPoints(70);

21

Page 22: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Layout engine Sizing

22

Page 23: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Conveniences.Layout engine

.automaticallyManagesSubnodes = true

23

Page 24: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Conveniences.Nodes

.hitTestSlop

24

Page 25: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Conveniences.Inversion

.inverted = true

25

Page 26: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Conveniences.Image Modification Block

backgroundImageNode.imageModificationBlock = { image in return image.applyBlurWithRadius(30, tintColor: UIColor(white: 0.5, alpha: 0.3), saturationDeltaFactor: 1.8, maskImage: nil) }

backgroundImageNode.image = someImage

26

Page 27: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Conveniences.Placeholders

27

Page 28: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Conveniences.Placeholders

.placeholderEnabled = YES

.placeholderFadeDuration = 0.3

28

Page 29: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

29

Demo

Page 30: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Баг при повороте устройства

30

Page 31: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

31

Баг при повороте устройства

Page 32: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Objective C / Swiftfunc toggleLoadingAnimation() { // swiftlint:disable force_cast let loaderView = view as! UIActivityIndicatorView // swiftlint:enable force_cast if isLoading { loaderView.startAnimating() } else { loaderView.stopAnimating() } }

32

Page 33: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Впечатления и выводыОчень мощный фреймворкМного плюшек прямо из коробкиСтабильные обновления и релизыОтзывчивое комьюнитиНевероятно крутой Layout Engine

33

Page 34: 2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit

Ссылкиhttp://texturegroup.org/https://github.com/texturegroup/texture

Ковалев АнтонiOS разработчик

[email protected]

https://vk.com/rosberry