隱式動(dòng)畫(huà)

一箱靴、前言

  • 每一個(gè)UIView內(nèi)部都默認(rèn)關(guān)聯(lián)著一個(gè)CALayer對(duì)象突委,我們可用稱(chēng)這個(gè)Layer為Root Layer(根層)
  • 所有的非RootLayer根層,也就是手動(dòng)創(chuàng)建的CALayer對(duì)象侣集,都存在著隱式動(dòng)畫(huà)

二坛增、什么是隱式動(dòng)畫(huà)?

  • 當(dāng)對(duì)非RootLayer的部分屬性進(jìn)行修改時(shí)雕欺,默認(rèn)會(huì)自動(dòng)產(chǎn)生一些動(dòng)畫(huà)效果
  • 而這些屬性稱(chēng)為AnimatableProperties(可動(dòng)畫(huà)屬性)
  • 也就是說(shuō)岛马,對(duì)非根層的layer可動(dòng)畫(huà)屬性進(jìn)行修改產(chǎn)生的動(dòng)畫(huà),就稱(chēng)為隱式動(dòng)畫(huà)

三屠列、可動(dòng)畫(huà)屬性 Animatable Properties

  • 如上所述:我們可以修改可動(dòng)畫(huà)屬性啦逆,來(lái)進(jìn)行隱式動(dòng)畫(huà),現(xiàn)在介紹可動(dòng)畫(huà)屬性

  • 查看CALayer頭文件:查看部分可動(dòng)畫(huà)屬性

  • 哪些才可以稱(chēng)著脸哀,可動(dòng)畫(huà)屬性呢蹦浦? -> 屬性,注釋中包含 Animatable

  • 常見(jiàn)可動(dòng)畫(huà)屬性

    • bounds:用于設(shè)置CALayer的寬度和高度撞蜂。修改這個(gè)屬性會(huì)產(chǎn)生縮放動(dòng)畫(huà)
    • backgroundColor:用于設(shè)置CALayer的背景色盲镶。修改這個(gè)屬性會(huì)產(chǎn)生背景色的漸變動(dòng)畫(huà)
    • position:用于設(shè)置CALayer的位置。修改這個(gè)屬性會(huì)產(chǎn)生平移動(dòng)畫(huà)
    • ............

// 查看部分頭文件蝌诡,還有其他的可動(dòng)畫(huà)屬性不在此

/* The bounds of the layer. Defaults to CGRectZero. Animatable. */
@property CGRect bounds;

/* The position in the superlayer that the anchor point of the layer's
 * bounds rect is aligned to. Defaults to the zero point. Animatable. */
@property CGPoint position;

/* The Z component of the layer's position in its superlayer. Defaults
 * to zero. Animatable. */
@property CGFloat zPosition;

/* Defines the anchor point of the layer's bounds rect, as a point in
 * normalized layer coordinates - '(0, 0)' is the bottom left corner of
 * the bounds rect, '(1, 1)' is the top right corner. Defaults to
 * '(0.5, 0.5)', i.e. the center of the bounds rect. Animatable. */
@property CGPoint anchorPoint;

/* The Z component of the layer's anchor point (i.e. reference point for
 * position and transform). Defaults to zero. Animatable. */
@property CGFloat anchorPointZ;

/* A transform applied to the layer relative to the anchor point of its
 * bounds rect. Defaults to the identity transform. Animatable. */
@property CATransform3D transform;

/* Convenience methods for accessing the `transform' property as an
 * affine transform. */
- (CGAffineTransform)affineTransform;
- (void)setAffineTransform:(CGAffineTransform)m;

/* Unlike NSView, each Layer in the hierarchy has an implicit frame
 * rectangle, a function of the `position', `bounds', `anchorPoint',
 * and `transform' properties. When setting the frame the `position'
 * and `bounds.size' are changed to match the given frame. */
@property CGRect frame;

/* When true the layer and its sublayers are not displayed. Defaults to
 * NO. Animatable. */
@property(getter=isHidden) BOOL hidden;

四 隱式動(dòng)畫(huà) 實(shí)現(xiàn) : CATransaction(動(dòng)畫(huà)事務(wù))

  • 可以通過(guò)動(dòng)畫(huà)事務(wù)(CATransaction)關(guān)閉默認(rèn)的隱式動(dòng)畫(huà)效果
[CATransactionbegin];
[CATransactionsetDisableActions:YES];
self.myview.layer.position= CGPointMake(10,10);
[CATransactioncommit];

五溉贿、實(shí)例

  • 實(shí)例:


    隱式動(dòng)畫(huà).gif
    • 點(diǎn)擊屏幕,讓控制器上的view視圖上的一個(gè)矩形子控件浦旱,不斷地進(jìn)行改變:位置宇色,顏色,與圓角
  • 思路:其實(shí)很簡(jiǎn)單颁湖,在touchBegin:方法中 -> 就是不斷修改layer的可動(dòng)畫(huà)屬性實(shí)現(xiàn)的

  • 代碼實(shí)現(xiàn):如下

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, weak) CALayer *greenLayer;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 添加 一個(gè)自定義的layer到控制器的view的layer上
    CALayer *layer = [CALayer layer];
    
    _greenLayer = layer;
    
    layer.position = CGPointMake(0, 0);
    layer.bounds = CGRectMake(0, 0, 100, 100);
    layer.anchorPoint = CGPointMake(0, 0);
    layer.backgroundColor = [UIColor greenColor].CGColor;
    
    [self.view.layer addSublayer:layer];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 開(kāi)啟事務(wù)
    [CATransaction begin];
    
    
//    [CATransaction setDisableActions:YES];
//    [CATransaction setAnimationDuration:2];
    _greenLayer.position = CGPointMake(arc4random_uniform(250), arc4random_uniform(300));
    
    _greenLayer.backgroundColor = [self randomColor].CGColor;
    _greenLayer.cornerRadius = arc4random_uniform(50);
    
    _greenLayer.borderColor = [self randomColor].CGColor;
    _greenLayer.borderWidth = arc4random_uniform(5);
    
    // 提交事務(wù)
    [CATransaction commit];
    
}

/**
 *  返回 隨機(jī)色
 */
- (UIColor *)randomColor
{
    CGFloat r = arc4random_uniform(256) / 255.0;
    CGFloat g = arc4random_uniform(256) / 255.0;
    CGFloat b = arc4random_uniform(256) / 255.0;
    return [UIColor colorWithRed:r green:g blue:b alpha:1];
}

@end
     ```



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣蠕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子甥捺,更是在濱河造成了極大的恐慌抢蚀,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镰禾,死亡現(xiàn)場(chǎng)離奇詭異皿曲,居然都是意外死亡唱逢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)屋休,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坞古,“玉大人,你說(shuō)我怎么就攤上這事劫樟』痉悖” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵毅哗,是天一觀的道長(zhǎng)听怕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)虑绵,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任闽烙,我火速辦了婚禮翅睛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘黑竞。我一直安慰自己捕发,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布很魂。 她就那樣靜靜地躺著扎酷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遏匆。 梳的紋絲不亂的頭發(fā)上法挨,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音幅聘,去河邊找鬼凡纳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帝蒿,可吹牛的內(nèi)容都是我干的荐糜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼葛超,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暴氏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起绣张,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤答渔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胖替,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體研儒,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豫缨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了端朵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片好芭。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冲呢,靈堂內(nèi)的尸體忽然破棺而出舍败,到底是詐尸還是另有隱情,我是刑警寧澤敬拓,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布邻薯,位于F島的核電站,受9級(jí)特大地震影響乘凸,放射性物質(zhì)發(fā)生泄漏厕诡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一营勤、第九天 我趴在偏房一處隱蔽的房頂上張望灵嫌。 院中可真熱鬧,春花似錦葛作、人聲如沸寿羞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绪穆。三九已至,卻和暖如春虱岂,著一層夾襖步出監(jiān)牢的瞬間玖院,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工量瓜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留司恳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓绍傲,卻偏偏與公主長(zhǎng)得像扔傅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烫饼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果猎塞,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌杠纵。在這里你可以看...
    F麥子閱讀 5,115評(píng)論 5 13
  • 問(wèn)題: 1.什么是隱式動(dòng)畫(huà)荠耽,為什么CALayer設(shè)置可動(dòng)畫(huà)屬性時(shí)會(huì)觸發(fā)隱式動(dòng)畫(huà)?2.UIView設(shè)置屬性比藻,為什么沒(méi)...
    人生看淡不服就干閱讀 10,619評(píng)論 1 15
  • 在前面的學(xué)習(xí)中铝量,我們討論了CoreAnimation除了動(dòng)畫(huà)外可以做到的任何事情倘屹。但是動(dòng)畫(huà)是CoreAni...
    小貓仔閱讀 1,527評(píng)論 0 0
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜慢叨,今天將帶大家一窺ios動(dòng)畫(huà)全貌纽匙。在這里你可以看...
    每天刷兩次牙閱讀 8,514評(píng)論 6 30
  • Core Animation Core Animation除了動(dòng)畫(huà)之外可以做到的任何事情。但是動(dòng)畫(huà)是Core An...
    清風(fēng)沐沐閱讀 652評(píng)論 1 3