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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

IOS-UIDynamic

2019-11-14 20:41:12
字體:
供稿:網(wǎng)友

UIDynamic中的三個(gè)重要概念

Dynamic Animator:動(dòng)畫者,為動(dòng)力學(xué)元素提供物理學(xué)相關(guān)的能力及動(dòng)畫,同時(shí)為這些元素提供相關(guān)的上下文,是動(dòng)力學(xué)元素與底層iOS物理引擎之間的中介,將Behavior對(duì)象添加到Animator即可實(shí)現(xiàn)動(dòng)力仿真
Dynamic Animator Item:動(dòng)力學(xué)元素,是任何遵守了UIDynamicItem協(xié)議的對(duì)象,從iOS 7.0開始,UIView和UICollectionViewLayoutAttributes默認(rèn)實(shí)現(xiàn)該協(xié)議。如果自定義的對(duì)象實(shí)現(xiàn)了該協(xié)議,即可通過Dynamic Animator實(shí)現(xiàn)物理仿真
UIDynamicBehavior:仿真行為,是動(dòng)力學(xué)行為的父類,基本的動(dòng)力學(xué)行為類UIGravityBehavior、UICollisionBehavior、UIAttachmentBehavior、UISnapBehavior、UipushBehavior以及UIDynamicItemBehavior均繼承自該父類
 
動(dòng)力學(xué)動(dòng)畫元素(Dynamic Animator Item)協(xié)議
只有遵守了UIDynamicItem協(xié)議的對(duì)象才可以參與到UI動(dòng)力學(xué)仿真中
從iOS 7開始,UIView和UICollectionViewLayoutAttributes 類默認(rèn)實(shí)現(xiàn)了該協(xié)議
協(xié)議定義的屬性:
bounds:Dynamic animator需要?jiǎng)赢嬙氐倪吙驎r(shí)調(diào)用,只讀屬性,用于計(jì)算物體的邊界以及質(zhì)量
center:動(dòng)力學(xué)元素的中心點(diǎn),讀寫屬性
transform:動(dòng)力學(xué)元素的旋轉(zhuǎn)角度,讀寫屬性(需要指定Layer的形變屬性)
 
動(dòng)力學(xué)行為(Dynamic Behavior)
iOS7.0中提供的動(dòng)力學(xué)行為包括:
UIGravityBehavior:重力行為
UICollisionBehavior:碰撞行為
UIAttachmentBehavior:附著行為
UISnapBehavior:吸附行為
UIPushBehavior:推行為
UIDynamicItemBehavior:動(dòng)力學(xué)元素行為
所有的UIDynamicBehavior都是可以獨(dú)立作用,同時(shí)也遵守力的合成。也就是說,組合使用行為可以實(shí)現(xiàn)一些較復(fù)雜的效果
 
重力行為(Gravity)
重力行為用于給動(dòng)力學(xué)元素指定一個(gè)重力向量

// 實(shí)例化一個(gè)重力行為,并傳入需要做動(dòng)力仿真的對(duì)象view

UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[view]];

// 將重力行為添加到animator

[animator addBehavior:gravity];
 
碰撞行為(Collision)
碰撞行為用于指定一組動(dòng)力學(xué)元素,在指定的邊界范圍內(nèi),可以彼此發(fā)生碰撞
碰撞行為提供了代理方法,可用于在物體碰撞前、后對(duì)動(dòng)力學(xué)元素做碰撞后續(xù)的處理

// 實(shí)例化碰撞行為,并指定view參與碰撞

UICollisionBehavior *collsion = [[UICollisionBehavior alloc] initWithItems:@[view]];

// 指定是否啟用參照系的邊界

collsion.translatesReferenceBoundsIntoBoundary = YES;

// 將碰撞行為添加至animator

[animator addBehavior:collsion];

 

吸附行為(Snap)

吸附行為可以將視圖通過動(dòng)畫吸附到某個(gè)點(diǎn)上
初始化設(shè)定一下UISnapBehavior的initWithItem:snapToPoint:即可
屬性:
damping:振幅大小,默認(rèn)為0.5f

/ 刪除之前的吸附行為

[_animator removeBehavior:_snap];

CGPoint location = [sender locationInView:self.view];

_snap = [[UISnapBehavior alloc] initWithItem:_boxImageView snapToPoint:location];

// 生成隨機(jī)振幅

CGFloat damping = arc4random_uniform(10) + 1;

_snap.damping = damping / 10.0f;

[_animator addBehavior:_snap];

 
附著行為(Attachment)
附著行為描述一個(gè)視圖與一個(gè)錨點(diǎn)或者另一個(gè)視圖相連接的情況
附著行為描述的是兩點(diǎn)之間的連接情況,可以模擬剛性或者彈性連接
在多個(gè)物體間設(shè)定多個(gè)UIAttachmentBehavior,可以模擬多物體連接
屬性:
attachedBehaviorType:連接類型(連接到錨點(diǎn)或視圖)
items:連接視圖數(shù)組
anchorPoint:連接錨點(diǎn)
length:距離連接錨點(diǎn)的距離
只要設(shè)置了以下兩個(gè)屬性,即為彈性連接
damping:振幅大小
frequency:振動(dòng)頻率

if (UIGestureRecognizerStateBegan == sender.state) {

    // 創(chuàng)建附加剛性行為

      CGPoint anchorPoint = CGPointMake(_boxImageView.center.x, _boxImageView.center.y);

    _attachment = [[UIAttachmentBehavior alloc] initWithItem:_boxImageView offsetFromCenter:UIOffsetMake(-25.0, -25.0) attachedToAnchor:anchorPoint];

    [_animator addBehavior:_attachment];

} else if (UIGestureRecognizerStateChanged == sender.state) {

    // 設(shè)置行為的錨點(diǎn)

    [_attachment setAnchorPoint:[sender locationInView:self.view]];

} else if (UIGestureRecognizerStateEnded == sender.state) {

    // 刪除附加行為

    [_animator removeBehavior:_attachment];

}

 

//附加彈性行為

if (UIGestureRecognizerStateBegan == sender.state) {

    CGPoint anchor = CGPointMake(_boxImageView.center.x, _boxImageView.center.y - 100);

    _attachment = [[UIAttachmentBehavior alloc] initWithItem:_boxImageView attachedToAnchor:anchor];

    [_animator addBehavior:_attachment];

    [_attachment setFrequency:1.0f];

    [_attachment setDamping:0.1f];

} else if (UIGestureRecognizerStateChanged == sender.state) {

    [_attachment setAnchorPoint:[sender locationInView:self.view]];

} else if (UIGestureRecognizerStateEnded == sender.state) {

    [_animator removeBehavior:_attachment];

}

 
推行為(Push)
•推行為可以為一個(gè)視圖施加一個(gè)作用力,該力可以是持續(xù)的,也可以是一次性的
•可以設(shè)置力的大小,方向和作用點(diǎn)等信息
•屬性:
•mode:推動(dòng)類型(一次性或是持續(xù)推)
•active:是否激活,如果是一次性推,需要激活
•angle:推動(dòng)角度
•magnitude:推動(dòng)力量

// 計(jì)算兩點(diǎn)之間距離

CGFloat distance = sqrtf(powf(p.x - _firstPoint.x, 2.0) + powf(p.y - _firstPoint.y, 2.0));

CGFloat angle = atan2(p.y - _firstPoint.y, p.x - _firstPoint.x);

_push.magnitude = distance / 20;

_push.angle = angle;

[_push setActive:YES];

 
動(dòng)力學(xué)元素行為(DynamicItem)
•是一個(gè)輔助的行為,用來設(shè)置運(yùn)動(dòng)學(xué)元素參與物理仿真過程中的參數(shù),如:彈性系數(shù)、摩擦系數(shù)、密度、阻力、角阻力以及是否允許旋轉(zhuǎn)等
Øelasticity(彈性系數(shù)):決定了碰撞的彈性程度,比如碰撞時(shí)物體的彈性
Øfriction(摩擦系數(shù)) :決定了沿接觸面滑動(dòng)時(shí)的摩擦力大小
Ødensity(密度): 跟size結(jié)合使用,計(jì)算物體的總質(zhì)量。質(zhì)量越大,物體加速或減速就越困難
Øresistance(阻力):決定線性移動(dòng)的阻力大小,與摩擦系數(shù)不同,摩擦系數(shù)只作用于滑動(dòng)運(yùn)動(dòng)
ØangularResistance(角阻力) :決定旋轉(zhuǎn)運(yùn)動(dòng)時(shí)的阻力大小
ØallowsRotation(允許旋轉(zhuǎn)):這個(gè)屬性很有意思,它在真實(shí)的物理世界沒有對(duì)應(yīng)的模型。設(shè)置這個(gè)屬性為 NO 物體就完全不會(huì)轉(zhuǎn)動(dòng),而無論施加多大的轉(zhuǎn)動(dòng)力
 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新竹市| 惠州市| 崇礼县| 澎湖县| 东丽区| 莎车县| 蒙城县| 平顶山市| 蒲城县| 连江县| 天津市| 林西县| 桐乡市| 丹巴县| 犍为县| 岳西县| 台北县| 若尔盖县| 许昌市| 新巴尔虎左旗| 镇赉县| 永年县| 章丘市| 马龙县| 昌吉市| 康平县| 南通市| 池州市| 九江市| 新津县| 镇安县| 广安市| 临武县| 建始县| 维西| 莱芜市| 扶风县| 新乡市| 贵德县| 尚义县| 沿河|