国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Rendering views on the screen

2019-11-09 14:55:33
字體:
來源:轉載
供稿:網友

很不錯的一篇講整體渲染的文章,這里記錄一下,順便當作記錄一下作者blog。

來源于:http://nsomar.com/rendering-views-on-the-screen/

這里再多貼一篇關于setNeedsLayout和layoutIfNeeded區別的文章

http://www.iosinsight.com/setneedslayout-vs-layoutifneeded-explained/

In this article I will try to explain and review the path that the view takes from initialisation to display, and what part does the CPU and GPU take in that PRocess.

Rendering overview

The application will create a CoreAnimation CALayer Hierarchy using one of the following methods:

UIKit which by creating UIViews will indirectly creates LayersCoreAnimations By adding CALayers manually

Application will then send the created hierarchy to the Render server (which is an external process) in Commit Transaction Phase

The CA Hierarchy is submitted to the CA render server, which render the hierarchy of Layers on screen using OpenGl or Metal

imageimage

Rendering UI

Layout (2 Passes)DisplayPrepare CommitCommit

Layout

In this phase the view hierarchy is build by composing views either by [UIView addSubview] or [CALayer addSublayer], Then the frames are set by calculating the constraints.

The layout phase is done in two consequent passes:

Constraints pass (setting constraints)Layout pass (calculating frames)
Constraints Pass

Happens in updateConstraints, subclasses can override updateConstraints to add constraints to its subviews. This pass is executed bottom-up from the subviews to parent views.

The layout engine will call updateConstraintsIfNeeded several times, however this method will only call updateConstraints if the needs update flag is set by calling setNeedsUpdateConstraints.

Calling setNeedsUpdateConstraints will set the needs update flag so any consequent calls to updateConstraintsIfNeeded (or the internal system layout pass methods). The constraints will be updated asynchronously.

Calling updateConstraintsIfNeeded will cause the layout system to call updateConstraintssynchronously. However updateConstraints is only called if setNeedsUpdateConstraints have been called before.

Each time the Constraints pass happens is followed by the Layout pass.

Layout Pass

After the constraints are set from the previous pass, the Layout system can now process these constraints and calculate and set the correct frames for each view.

Happens in layoutSubviews, subclasses can override layoutSubviews to participate in the layout process and adjust the frames of the subviews. This pass is executed top-down from the parent view to the subviews. After this method the frame of the view is set.

Calling setNeedsLayout will set the needs layout flag so any consequent calls to layoutIfNeeded(or the internal system layout pass methods). The layout frames will be updated asynchronously.

Calling layoutIfNeeded will cause the layout system to call layoutSubviews synchronously. However layoutSubviews is only called if setNeedsLayout have been called before.

Display

In this phase the view will use GoreGraphics to draw on the CALayer that is backing the UIView, this phase is also top-down.

The display phase take place in drawRect and can be triggered by calling setNeedsDisplay will will fire a future redraw.

Relation between Constraint, Layout and Display
Display pass depends on Layout pass which depends on Constraints pass.Adding/Removing/Updating Constraints will trigger changes to the layout by calling setNeedsLayout.Layout pass (layoutIfNeeded/layoutSubviews) makes sure that the constraints are up-to data by calling an internal copy of updateConstraintsIfNeeded.
Constraints/Layout rule of thumb

Prepare

In this phase the PNG/JPEG Images are decoded to bitmaps and are converted to a GPU optimised image in order to be served to the GPU.

Commit

Now that the layout is ready and the hierarchy is build, the layout system will package all the CALayer hierarchy and send it to the rendering server.

Animations

Rendering an animation is very similar to rendering a static UI with the distinction that when rendering the animations the animation also has to be package and sent to the render server. The application will create the animation using animateWithDuration or CABasicAnimations and this animation will be package and sent ti the render server which in turn will render each frame for the animation.

CPU vs GPU bound Operations

The CPU and CPU both participate in the rendering process each of them has its own role.

The main idea is to minimise the CPU involvement and increase the CPU one.

GPU operations
Blending multiple images togetherAntialias imagesComposition of Image
CPU operations
Masking of different views and images and clipping views to that maskCreating shadows around viewsVisual effects such as blurringDrawing with CoreGraphics
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐亭县| 任丘市| 五华县| 麻栗坡县| 淳安县| 启东市| 安图县| 华坪县| 浦北县| 山东| 沛县| 长丰县| 乌拉特中旗| 壤塘县| 寻乌县| 淮滨县| 开封市| 景泰县| 东丽区| 珠海市| 浦江县| 昂仁县| 义马市| 井研县| 五原县| 彭泽县| 将乐县| 彭州市| 内丘县| 平阴县| 西青区| 米林县| 东阿县| 文登市| 巴彦县| 惠水县| 延庆县| 宁化县| 卓资县| 武邑县| 革吉县|