成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ios9學習系列:UIKit Dynamics

移動開發
UIKit Dynamics 在 iOS 7 中首次被介紹的,可以讓開發者通過簡單的方式,給應用界面添加模擬物理世界的交互動畫。iOS 9 中又加入了一些大的改進,我們將在本文中查看一些。

UIKit Dynamics 在 iOS 7 中***被介紹的,可以讓開發者通過簡單的方式,給應用界面添加模擬物理世界的交互動畫。iOS 9 中又加入了一些大的改進,我們將在本文中查看一些。

Non-Rectangular Collision Bounds

在 iOS 9 之前,UIKitDynamics 的 collision bounds 只能是長方形。這讓一些并非是***的長方形的碰撞效果看起來有些古怪。iOS 9 中支持三種 collision bounds 分別是 Rectangle(長方形), Ellipse(橢圓形) 和 Path(路徑)。Path 可以是任意路徑,只要是逆時針的,并且不是交叉在一起的。一個警告是,path 必須是凸面的不能使凹面的。

為了提供一個自定義的collision bounds ,你可以子定義一個 UIView 的子類。

code 1

如果你有個自定義的視圖有一個自定義的bounds,你同樣可以這么做。

UIFieldBehavior

在 iOS 9 之前,只有一種 gravity behaviour(重力感應)類型的 behaviour。開發者也無法擴展或者自定義其他類型。

現在,UIKit Dynamics 包含了更多的 behaviours.

Linear Gravity

Radial Gravity

Noise

Custom

這些 behaviours 都有一些屬性可以用來設置不同的效果,并且可以簡單的添加和使用。

Building a UIFieldBehavior & Non-Rectangular Collision Bounds Example

我們來用創建一個例子,把這兩個特性都融合進來。它有幾個視圖(一個橢圓和一個正方形)添加了一些碰撞邏輯和一些噪音的 UIFieldBehavior。

result 1

要使用 UIKit Dynamics,首先要創建一個 UIDynamicAnimator。在 viewDidLoad方法中,為你的變量創建一個引用。

code 2

現在你需要添加一些視圖,他們將會動起來。

code 3

這是我們給view 添加的兩個基本的behaviors。

code 4

***個 behaviors, 我們添加了一個重力感應模型。

code 5

接下來我們添加了一個 UIFieldBehavior。使用noiseFieldWithSmoothness方法進行了初始化。我們把方形和橢圓形添加到了behavior中,然后給 animator 添加了 field behavior。

code 6

我們接著創建了一個 UICollisionBehavior。這會阻止兩個元素在碰撞時疊加,并增加了物理模型的動畫效果。我們使用setTranslatesReferenceBoundsIntoBoundaryWithInsets,給視圖添加了一個邊緣的設置。如果不設置這個盒子的話,剛才的重力感應動畫會把方形和橢圓形的視圖掉進屏幕以下,而回不來。(我們就看不到碰撞了)

說到重力感應,我們需要確保他的方向始終是朝下的,也就是實際的物理世界中的方向。為了做到這點,我們需要使用 CoreMotion framework。創建一個CMMotionManager 變量。

code 7

我們設置一個變量作為類的屬性,是因為我們始終需要用到它。否則的話,CMMotionManager 會因為被釋放掉而無法更新。當我們發現設備的方向發生變化,為們設置重力感應模型的 gravityDirection 屬性來,讓重力的方向始終向下。

code 8

注意,我們這個例子只支持了 portrait一種模式,如果你希望支持全部的方向的話,你可以自己添加一些計算代碼。

當你打開應用時,你可以看到如下圖一樣的畫面。

visual station

方形視圖圍繞著橢圓移動,但你無法看出什么門道。WWDC的session 229,介紹了一個方法,可以可視化的看到動畫的效果。你需要添加一個橋接頭(如果是用swift寫的項目),添加以下代碼。

code 9

這會暴露一些私有 API,讓UIDynamicAnimator 把debug模式打開。這能讓你觀察到空間扭曲的情況。在ViewController 類中,把 animator 的 debugEnable 屬性設置為 true。

code 10

#p#

現在,當你打開應用時,你就能夠看到 UIFieldBehavior 提供的空間扭曲了。

debug mode

你同樣能夠看到視圖碰撞時,圍繞在方形和圓形上的的輪廓線。你還可以添加另外一些屬性,他們并非 API 的標注屬性,但是可以在lldb中使用。比如 debugInterval 和 debugAnimationSpeed ,當你需要debug你的動畫時,他們會非常有幫助。

我們可以看到field 起了作用,可以清楚的看到碰撞的效果。如果我們想tweak更多屬性。我們可以給對象設置具體的數值。然后重啟應用看看他的變化。我們給頁面添加三個UISlider 控制組件。分別控制力量,平滑度和速度。力量的組件數值范圍在0-25,其他兩個都是0-1。

interface builder

當你在Interface Builder中創建好,拖拽三個動作事件到ViewController類。,然后按下面設置,更新他們的屬性。

code 11

現在,運行應用。你可以通過控制條來設置屬性的具體值,以觀察動畫的實際效果。

result

希望這些能夠讓你快速理解 UIKit Dynamics 里UIFieldBehavior 和  non-rectangular  collision bounds APIs 是怎么工作和 debug 的。我推薦你在真實的設備(而不是模擬器)中查看效果,否則你看不出 motion 所帶來的效果變化。

延伸閱讀

想要了解更多關于 UIKit Dynamics 的新特性,請瀏覽 WWDC 2015 的 session 229What’s New in UIKit Dynamics and Visual Effects。另外,并忘了我們的 demo 項目文件可以在 Github 上找到。

責任編輯:倪明 來源: 簡書
相關推薦

2015-08-20 09:00:23

ios9api

2015-08-24 09:24:21

ios學習contacts fr

2015-09-25 09:44:24

ios9MapkitTrans

2016-03-18 11:19:57

ios9replaykit入門

2015-08-24 09:19:05

ios9split scree

2015-08-20 09:19:46

ios9uistackview

2015-07-16 12:59:19

IOS9UIDynamics

2015-10-16 14:27:29

iOS9collectionV特性

2015-09-23 10:30:44

iOS 9UIStack Vie

2015-07-02 16:25:09

iOS 9UIStackView

2015-07-02 17:32:28

iOS 9蘋果

2015-09-09 15:51:54

2015-11-11 10:17:15

ios9聯系人框架干貨

2015-09-10 09:31:43

IOS9IOS9.1

2015-09-16 09:02:10

IOS9新功能搜索業務

2015-10-12 11:26:12

iOS 9適配

2015-07-13 16:56:40

IOS 9適配教程

2015-07-27 09:04:33

ios9

2015-10-20 09:36:52

蘋果iOS 9字體

2015-05-19 09:51:57

WWDCiOS9
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区在线 | 色婷婷九月 | www.四虎.com| 欧美日韩在线免费观看 | 国产日韩欧美精品一区二区 | 国产精品久久一区 | 国产精品久久久久久久久久免费看 | 色花av| 奇米久久久 | 国产91视频播放 | 久色网 | 九九热免费视频在线观看 | 日韩精品一区二区三区视频播放 | 一区二区三区国产精品 | 午夜久久久久久久久久一区二区 | 日本a在线| 久久av一区 | 国产高清视频在线观看播放 | 免费亚洲一区二区 | 91麻豆精品国产91久久久资源速度 | 日本电影免费完整观看 | 久久久久国产精品午夜一区 | 欧美精品一区二区三区在线播放 | 国产亚洲精品久久久久久牛牛 | 中文字幕精品一区二区三区在线 | 久久久久国产精品一区二区 | 无码日韩精品一区二区免费 | 天堂一区二区三区 | 成年网站在线观看 | 国产精品国产精品国产专区不卡 | 久久看看 | 韩国毛片一区二区三区 | 国产色爽 | 久久精品91久久久久久再现 | 人人亚洲 | 日韩av啪啪网站大全免费观看 | a级大片免费观看 | 在线免费观看黄网 | 亚洲人人舔人人 | 亚洲欧美视频 | 婷婷桃色网 |