? UIview 遵循的代理屬性

UiView的一些代理 一.<NSCoding>

我們會(huì)在以下這些場(chǎng)合用到NSCoding:

1. XIB/Storyboard

我們?cè)趧?chuàng)建一個(gè)UIView的subclass的時(shí)候捉撮,會(huì)注意到摄乒,如果我們希望在初始化這個(gè)view的時(shí)候就要做一些事情,不但要覆蓋掉initWithFrame:方法是目,也要覆蓋initWithCoder:方法。

如果這個(gè)view是我們用代碼創(chuàng)建的桦踊,那么會(huì)調(diào)用到initWithFrame:方法恬总,但如果我們是XIB則會(huì)調(diào)用initWithCoder:這個(gè)方法驼修。

XIB或是Storyboard在我們編寫程序的期間是XML格式的檔案,當(dāng)我們編譯App的時(shí)候退敦,XCode會(huì)將其編譯成binary格式的data粘咖,分別是NIB與storyboardc,而這些data其實(shí)就是序列化過的Objective-C View對(duì)象侈百。

將data轉(zhuǎn)成view瓮下,這個(gè)流程正是NSCoding protocol,我們從UIView的interface中可以看到UIView實(shí)現(xiàn)了NSCoding protocol钝域。

2. NSUserDefaults

在我們的App中讽坏,如果我們要儲(chǔ)存一些偏好設(shè)定,那么最好的選擇就是NSUserDefaults例证。操作NSUserDefaults和操作NSDictionary差不多路呜,只要指定特定的key,就可以將設(shè)定值存入NSUserDefaults中。

NSUserDefaults支持NSString胀葱、NSArray漠秋、NSDictionary、NSData以及int抵屿、doubel庆锦、float等類型的數(shù)據(jù)。

但如果是我們自定義的Class轧葛,就無法存入NSUserDefaults中搂抒,我們會(huì)先通過NSCoding轉(zhuǎn)成NSData后存入,在取出的時(shí)候也要多做一次unarchive(反序列化)尿扯。

二.<UIAppearance和UIAppearanceContainer>

iOS5及其以后提供了一個(gè)比較強(qiáng)大的工具UIAppearance求晶,我們通過UIAppearance設(shè)置一些UI的全局效果,這樣就可以很方便的實(shí)現(xiàn)UI的自定義效果又能最簡(jiǎn)單的實(shí)現(xiàn)統(tǒng)一界面風(fēng)格衷笋,它提供如下兩個(gè)方法芳杏。

+ (id)appearance

這個(gè)方法是統(tǒng)一全部改,比如你設(shè)置UINavBar的tintColor右莱,你可以這樣寫:[[UINavigationBar appearance] setTintColor:myColor];

+ (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...

這個(gè)方法可設(shè)置某個(gè)類的改變:例如:設(shè)置UIBarButtonItem 在UINavigationBar蚜锨、UIPopoverController、UITabbar中的效果慢蜓。就可以這樣寫

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class],[UITabbar class] nil] setTintColor:myPopoverNavBarColor];

請(qǐng)注意*使用appearance設(shè)置UI效果最好采用全局的設(shè)置亚再,在所有界面初始化前開始設(shè)置,否則可能失效晨抡。

具體UI外觀修改如下:

1.修改導(dǎo)航欄背景

代碼如下:

UINavigationBar * appearance = [UINavigationBar appearance];

UIImage *navBackgroundImg =[UIImage imageNamed:@"navBg.png”];

[appearance setBackgroundImage:navBackgroundImg forBarMetrics:UIBarMetricsDefault];

2.標(biāo)簽欄(UITabbar)

代碼如下:

UITabBar *appearance = [UITabBar appearance];

//設(shè)置背景圖片

[appearance setBackgroundImage:[UIImage imageNamed:@"tabbar_bg.png"]];

//門置選擇item的背景圖片

UIImage * selectionIndicatorImage =[[UIImage imageNamed:@"tabbar_slider"]resizableImageWithCapInsets:UIEdgeInsetsMake(4, 0, 0, 0)] ;

[appearance setSelectionIndicatorImage:selectionIndicatorImage];

3.分段控件(UISegmentControl)

代碼如下:

UISegmentedControl *appearance = [UISegmentedControl appearance];

//Segmenteg正常背景

[appearance setBackgroundImage:[UIImage imageNamed:@"Segmente.png"]

forState:UIControlStateNormal

barMetrics:UIBarMetricsDefault];

//Segmente選中背景

[appearance setBackgroundImage:[UIImage imageNamed:@"Segmente_a.png"]

forState:UIControlStateSelected

barMetrics:UIBarMetricsDefault];

//Segmente左右都未選中時(shí)的分割線

//BarMetrics表示navigation bar的狀態(tài)氛悬,UIBarMetricsDefault 表示portrait狀態(tài)(44pixel height),UIBarMetricsLandscapePhone 表示landscape狀態(tài)(32pixel height)

[appearance setDividerImage:[UIImage imageNamed:@"Segmente_line.png"]

forLeftSegmentState:UIControlStateNormal

rightSegmentState:UIControlStateNormal

barMetrics:UIBarMetricsDefault];

[appearance setDividerImage:[UIImage imageNamed:@"Segmente_line.png"]

forLeftSegmentState:UIControlStateSelected

rightSegmentState:UIControlStateNormal

barMetrics:UIBarMetricsDefault];

[appearance setDividerImage:[UIImage imageNamed:@"Segmente_line.png"]

forLeftSegmentState:UIControlStateNormal

rightSegmentState:UIControlStateSelected

barMetrics:UIBarMetricsDefault];

//字體

NSDictionary *textAttributes1 = @{UITextAttributeFont: [UIFont systemFontOfSize:18],

UITextAttributeTextColor: [UIColor blueColor],

UITextAttributeTextShadowColor: [UIColor whiteColor],

UITextAttributeTextShadowOffset: [NSValue valueWithCGSize:CGSizeMake(1, 1)]};

[appearance setTitleTextAttributes:textAttributes1 forState:1];

NSDictionary *textAttributes2 = @{UITextAttributeFont: [UIFont systemFontOfSize:18],

UITextAttributeTextColor: [UIColor whiteColor],

UITextAttributeTextShadowColor: [UIColor blackColor],

UITextAttributeTextShadowOffset: [NSValue valueWithCGSize:CGSizeMake(1, 1)]};

[appearance setTitleTextAttributes:textAttributes2 forState:0];

4.UIBarbutton

注意:UIBarbutton有l(wèi)eftBarButton耘柱,rightBarButton和backBarButton如捅,其中backBarButton由于帶有箭頭,需要單獨(dú)設(shè)置调煎。

barButton背景設(shè)置是ios6.0及以后的镜遣,而backbutton是ios5.0及以后的,這里要注意士袄!

代碼如下:

//修改導(dǎo)航條上的UIBarButtonItem

UIBarButtonItem *appearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

//設(shè)置導(dǎo)航欄的字體包括backBarButton和leftBarButton悲关,rightBarButton的字體

NSDictionary *textAttributes = @{UITextAttributeFont: [UIFont systemFontOfSize:18],

UITextAttributeTextColor: [UIColor blueColor],

UITextAttributeTextShadowColor: [UIColor whiteColor],

UITextAttributeTextShadowOffset: [NSValue valueWithCGSize:CGSizeMake(1, 1)]};

[appearance setTitleTextAttributes:textAttributes forState:1];//forState為0時(shí)為下正常狀態(tài),為1時(shí)為點(diǎn)擊狀態(tài)娄柳。

//修改leftBarButton寓辱,rightBarButton背景效果

[appearance setBackgroundImage:[UIImage imageNamed:@"navBarButton.png"]

forState:UIControlStateNormal

style:UIBarButtonItemStyleBordered

barMetrics:UIBarMetricsDefault];

[appearance setBackgroundImage:[UIImage imageNamed:@"navBarButton_a.png"]

forState:UIControlStateHighlighted

style:UIBarButtonItemStyleBordered

barMetrics:UIBarMetricsDefault];

//backBarButton需要單獨(dú)設(shè)置背景效果。只能在ios6.0以后才能用

[appearance setBackButtonBackgroundImage:[UIImage imageNamed:@"nav_bg.png"]

forState:0

barMetrics:UIBarMetricsDefault];

[appearance setBackButtonBackgroundImage:[UIImage imageNamed:@"work.png"]

forState:1

barMetrics:UIBarMetricsDefault];

[appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1)

forBarMetrics:UIBarMetricsDefault];

5.工具欄(UIToolbar)

UIToolbar *appearance = [UIToolbar appearance];

//樣式和背景二選一即可赤拒,看需求了

//樣式(黑色半透明秫筏,不透明等)設(shè)置

[appearance setBarStyle:UIBarStyleBlackTranslucent];

//背景設(shè)置

[appearance setBackgroundImage:[UIImage imageNamed:@"toolbarBg.png"]

forToolbarPosition:UIToolbarPositionAny

barMetrics:UIBarMetricsDefault];

三.<DynamicItem>

所有的UIView類都是一個(gè)DynamicItem對(duì)象诱鞠,都可以實(shí)現(xiàn)UIDynamic動(dòng)畫。UIDynamic这敬,隸屬于UIKit框架航夺,可以認(rèn)為是一種物理引擎,能模擬和仿真現(xiàn)實(shí)生活中的物理現(xiàn)象重力崔涂、彈性碰撞等現(xiàn)象敷存。

UIDynamic使用步驟

創(chuàng)建一個(gè)物理仿真器(順便設(shè)置仿真范圍)

創(chuàng)建相應(yīng)的物理仿真行為(順便添加物理仿真元素)

將物理仿真行為添加到物理仿真器中,開始仿真堪伍。

任何遵守了UIDynamicItem協(xié)議的對(duì)象都可以作為物理仿真元素。(UIView)

UIView默認(rèn)已經(jīng)遵守了UIDynamicItem協(xié)議觅闽,因此任何UI控件都能做物理仿真

UICollectionViewLayoutAttributes類默認(rèn)也遵守UIDynamicItem協(xié)議帝雇。

物理仿真行為UIDynamic提供了以下幾種物理仿真行為UIGravityBehavior:

重力行為UICollisionBehavior:

碰撞行為UISnapBehavior:

捕捉行為UIPushBehavior:

推動(dòng)行為UIAttachmentBehavior:

附著行為UIDynamicItemBehavior:

動(dòng)力元素行為物理仿真器它可以讓物理仿真元素執(zhí)行物理仿真行為,它是UIDynamicAnimator類型的對(duì)象蛉拙。

UIDynamicAnimator的初始化- (instancetype)initWithReferenceView:(UIView *)view;view參數(shù):是一個(gè)參照視圖尸闸,表示物理仿真的范圍UIDynamicAnimator的常見方法

//添加1個(gè)物理仿真行為- (void)addBehavior:(UIDynamicBehavior *)behavior;//移除1個(gè)物理仿真行為- (void)removeBehavior:(UIDynamicBehavior *)behavior;

//移除之前添加過的所有物理仿真行為- (void)removeAllBehaviors;UIDynamicAnimator的常見屬性//參照視圖@property (nonatomic, readonly) UIView* referenceView;

//添加到物理仿真器中的所有物理仿真行為@property (nonatomic, readonly, copy) NSArray* behaviors;

//是否正在進(jìn)行物理仿真@property (nonatomic, readonly, getter = isRunning) BOOL running;

//代理對(duì)象(能監(jiān)聽物理仿真器的仿真過程,比如開始和結(jié)束)@property (nonatomic, assign) iddelegate;

四.<UITraitEnvironment>

為了表征 Size Classes孕锄,Apple 在 iOS 8 中引入了一個(gè)新的類--UITraitCollection吮廉。這個(gè)類封裝了像水平和豎直方向的 Size Class 等信息。iOS 8 的 UIKit 中大多數(shù) UI 的基礎(chǔ)類 (包括 UIScreen畸肆,UIWindow宦芦,UIViewController 和 UIView) 都實(shí)現(xiàn)了 UITraitEnvironment 這個(gè)接口,通過其中的 traitCollection 這個(gè)屬性轴脐,我們可以拿到對(duì)應(yīng)的 UITraitCollection 對(duì)象调卑,從而得知當(dāng)前的 Size Class,并進(jìn)一步確定界面的布局大咱。

和 UIKit 中的響應(yīng)者鏈正好相反恬涧,traitCollection 將會(huì)在 view hierarchy 中自上而下地進(jìn)行傳遞。對(duì)于沒有指定 traitCollection 的 UI 部件碴巾,將使用其父節(jié)點(diǎn)的 traitCollection溯捆。這在布局包含 childViewController 的界面的時(shí)候會(huì)相當(dāng)有用。在 UITraitEnvironment 這個(gè)接口中另一個(gè)非常有用的是 -traitCollectionDidChange:厦瓢。在 traitCollection 發(fā)生變化時(shí)提揍,這個(gè)方法將被調(diào)用。在實(shí)際操作時(shí)旷痕,我們往往會(huì)在 ViewController 中重寫 -traitCollectionDidChange: 或者 -willTransitionToTraitCollection:withTransitionCoordinator: 方法 (對(duì)于 ViewController 來說的話碳锈,后者也許是更好的選擇,因?yàn)樘峁┝宿D(zhuǎn)場(chǎng)上下文方便進(jìn)行動(dòng)畫欺抗;但是對(duì)于普通的 View 來說就只有前面一個(gè)方法了)售碳,然后在其中對(duì)當(dāng)前的 traitCollection 進(jìn)行判斷,并進(jìn)行重新布局以及動(dòng)畫。

五.<UICoordinateSpace protocol>

iOS 8之前贸人,window和screen的坐標(biāo)是不變的间景。它們不會(huì)進(jìn)行旋轉(zhuǎn),而是一直處于豎屏?xí)r的坐標(biāo)體系艺智。我們是在View Controller旋轉(zhuǎn)方法中做對(duì)應(yīng)的處理倘要。

iOS8之后,像上文描述的那樣十拣,window和screen的坐標(biāo)會(huì)隨著app旋轉(zhuǎn)而改變封拧。也不總是這樣的情況,因?yàn)閂iew Controller仍然決定了App在當(dāng)前視圖下支持哪幾個(gè)方向夭问。 在某些時(shí)候泽西,我們需要一些修正之后的frame(比如需要存儲(chǔ)touch事件在屏幕上的坐標(biāo)),這個(gè)時(shí)候新的UICoordinateSpace就登場(chǎng)了缰趋。

UICoordinateSpace協(xié)議的接口如上捧杉,使用這些接口我們可以從當(dāng)前視圖的坐標(biāo)轉(zhuǎn)化到在screen的坐標(biāo)體系當(dāng)中,像這樣:[myView convertPoint:point toCoordinateSpace:myView.window.screen.fixedCoordinateSpace];這里提到了fixedCoordinateSpace秘血,在iOS 8上UIScreen提供了兩個(gè)新的屬性味抖,如下:@property (readonly) idcoordinateSpace NS_AVAILABLE_IOS(8_0);@property (readonly) idfixedCoordinateSpace NS_AVAILABLE_IOS(8_0);

coordinateSpace值的是當(dāng)前screen旋轉(zhuǎn)之后的坐標(biāo)體系,fixedCoordinateSpace指的是修正之后的坐標(biāo)體系灰粮。我們同樣可以把screen的坐標(biāo)轉(zhuǎn)換到當(dāng)前視圖的坐標(biāo)體系仔涩,如下:

[myView.window.screen.fixedCoordinateSpace convertPoint:point? ? ? toCoordinateSpace:myView];

舉個(gè)例子來說,在iPhone 5的屏幕大小上(320 * 568)粘舟,myView在豎屏方向的frame是CGRectMake(50, 50, 200, 200)红柱,myView的Super View是window。有如下輸出結(jié)果:

CGPoint point = [myView convertPoint:CGPointMake(0, 0) toCoordinateSpace:[UIScreen mainScreen].fixedCoordinateSpace];

NSLog(@"fixedCoordinateSpace %@", NSStringFromCGPoint(point)); // {50, 50}

point = [myView convertPoint:CGPointMake(0, 0) toCoordinateSpace:[UIScreen mainScreen].coordinateSpace];

NSLog(@"coordinateSpace %@", NSStringFromCGPoint(point)); // {50, 50}

此時(shí)我們把設(shè)備順時(shí)針旋轉(zhuǎn)90度蓖乘,在這兩種不同的坐標(biāo)體系下分別輸出的結(jié)果是:

NSLog(@"fixedCoordinateSpace %@", NSStringFromCGPoint(point)); // {50, 518}

NSLog(@"coordinateSpace %@", NSStringFromCGPoint(point)); // {50, 50}

六.<UIFocusItem>

該協(xié)議用于描述第三方類,允許在一個(gè)項(xiàng)目中申報(bào)其參與焦點(diǎn)系統(tǒng)的能力锤悄。

UIView的對(duì)象符合UIFocusItem協(xié)議能夠參與焦點(diǎn)系統(tǒng);此外,只能集中UIFocusItem對(duì)象。

即使一個(gè)對(duì)象符合UIFocusItem不是目前focusable,它可能仍然關(guān)注系統(tǒng)產(chǎn)生影響嘉抒。例如,項(xiàng)目設(shè)置成不可定焦,但這完全掩蓋其他物品,可能防止focusable其他物品,因?yàn)樗麄儗?duì)用戶是不可見的零聚。另外,因?yàn)閁IFocusItem符合UIFocusEnvironment,仍可能影響項(xiàng)目設(shè)置成不可定焦的關(guān)注行為他們包含的商品,或者對(duì)焦點(diǎn)更新。是在iOS10以后新增加的類目些侍。

七.<CALayerDelegate>

CALayer的基本操作.

CALayer簡(jiǎn)介:

CALayer我們又稱為層隶症,在每個(gè)UIView內(nèi)部都有一個(gè)layer的屬性,UIView之所以能夠顯示岗宣,就是因?yàn)樗锩嬗衛(wèi)ayer層蚂会,才具有顯示的功能,我們通過操作CALayer對(duì)象,可以很方便地調(diào)整UIView的一些外觀屬性耗式,例如可以給UIView設(shè)置陰影,圓角,邊框等等...

操作layer改變UIView外觀.

2.1 設(shè)置陰影

//默認(rèn)圖層是有陰影的, 只不過是透明的胁住。1為不透明趁猴,0為透明_RedView.layer.shadowOpacity = 1;//設(shè)置陰影的偏移量self.imageV.layer.shadowOffset = CGSizeMake(-30, -10);//設(shè)置陰影的模糊程度self.imageV.layer.shadowRadius = 10;//設(shè)置陰影的圓角_RedView.layer.shadowRadius =10;//設(shè)置陰影的顏色,把UIKit轉(zhuǎn)換成CoreGraphics框架,用.CG開頭_RedView.layer.shadowColor = [UIColor blueColor].CGColor;

2.2.設(shè)置邊框

設(shè)置圖層邊框,在圖層中使用CoreGraphics的CGColorRef//設(shè)置邊框的顏色_RedView.layer.borderColor = [UIColor whiteColor].CGColor;//設(shè)置邊框的寬度_RedView.layer.borderWidth = 2;

2.3.設(shè)置圓角

圖層的圓角半徑,圓角半徑為寬度的一半, 就是一個(gè)圓_RedView.layer.cornerRadius = 50;

操作layer改變UIImageView的外觀.

3.1 設(shè)置陰影

//UIView本身就自帶陰影效果,它是透明._imageView.layer.shadowOpacity = 1;//設(shè)置陰影的偏移量_imageView.layer.shadowOffset = CGSizeMake(-30, -10);//設(shè)置陰影的模糊程度_imageView.layer.shadowRadius = 10;//設(shè)置陰影的顏色_imageView.layer.shadowColor = [UIColor blueColor].CGColor;

3.2 設(shè)置圖形邊框

//設(shè)置邊框?qū)挾萠imageView.layer.borderWidth = 2;//設(shè)置邊框顏色_imageView.layer.borderColor = [UIColor whiteColor].CGColor;

3.3 設(shè)置圖片的圓角半徑

//我們?cè)O(shè)置的所有l(wèi)ayer的屬性只作用在根層上,根層設(shè)置為圓形后彪见,其上面的圖片并不會(huì)改變儡司,因此需要裁剪。_imageView.layer.cornerRadius = 50;//裁剪,超出裁剪區(qū)域的部分全部裁剪掉_imageView.layer.masksToBounds = YES;

注意:UIImageView當(dāng)中Image并不是直接添加在根層上面的.而是添加在layer當(dāng)中的contents層里.我們?cè)O(shè)置層的所有屬性它只作用在根層上面.對(duì)contents里面的東西并不起作用.所以我們看不到圖片有圓角的效果.想要讓圖片有圓角的效果.可以把masksToBounds這個(gè)屬性設(shè)為YES.把就會(huì)把超過根層以外的東西都給裁剪掉.

layer的 CATransform3D屬性.

只有旋轉(zhuǎn)的時(shí)候才可以看出3D的效果.

//x,y,z 分別代表x,y,z軸. //旋轉(zhuǎn)CATransform3DMakeRotation(M_PI, 1, 0, 0);//平移CATransform3DMakeTranslation(x,y,z)//縮放CATransform3DMakeScale(x,y,z);//可以通過KVC的方式進(jìn)行設(shè)置屬性.//但是CATransform3DMakeRotation的值是一個(gè)結(jié)構(gòu)體, 所以要把結(jié)構(gòu)轉(zhuǎn)成對(duì)象.NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];[_imageView.layer setValue:value forKeyPath:@"transform.scale"];

什么時(shí)候用KVC?當(dāng)需要做一些快速縮放,平移,二維的旋轉(zhuǎn)時(shí)用KVC.比如: [_imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];快速的進(jìn)行縮放.后面forKeyPath屬性值不是亂寫的.蘋果文檔當(dāng)中給了相關(guān)的屬性.

forKeyPath屬性值

自定義CALayer.

2.1 如何自定義Layer.

自定義CALayer的方式創(chuàng)建UIView的方式非常相似.

CALayer *layer = [CALayer layer];layer.frame = CGRectMake(50, 50, 100, 100);layer.backgroundColor = [UIColor redColor].CGColor;[self.view.layer addSublayer:layer];給layer設(shè)置圖片.layer.contents = (id)[UIImage imageNamed:@"icon"].CGImage;

2.2 關(guān)于CALayer的疑惑?

為什么要使用CGImageRef余指、CGColorRef?

CALayer定義在QuartzCore框架中.CGImageRef捕犬、CGColorRef兩種數(shù)據(jù)類型定義在CoreGraphics框架中.UIColor、UIImage定義在UIKit框架中.QuartzCore框架和CoreGraphics框架是可以跨平臺(tái)使用的酵镜,在iOS和Mac OSX上都能使用.但是UIKit框架只能在iOS中使用.所以為了保證可移植性碉碉,QuartzCore不能使用UIImage、UIColor淮韭,只能使用CGImageRef誉裆、CGColorRef.

UIView和CALayer都能夠顯示東西,該怎樣選擇?

對(duì)比CALayer,UIView多了一個(gè)事件處理的功能缸濒。也就是說,CALayer不能處理用戶的觸摸事件粱腻,而UIView可以庇配,但是CALayer的性能會(huì)高一些,因?yàn)樗倭耸录幚淼墓δ苌苄虞p量級(jí)如果顯示出來的東西需要跟用戶進(jìn)行交互的話捞慌,用UIView;如果不需要跟用戶進(jìn)行交互柬批,用UIView或者CALayer都可以我們平常開發(fā)中一般用UIView.

CALayer的兩個(gè)重要屬性position和anchorPoint

position和anchorPoint是CAlayer的兩個(gè)屬性.我們以前修改一個(gè)控件的位置都是能過Frame的方式進(jìn)行修改.現(xiàn)在利用CALayer的position和anchorPoint屬性也能夠修改控件的位置.

這兩個(gè)屬性是配合使用的.position:它是用來設(shè)置當(dāng)前的layer在父控件當(dāng)中的位置的.所以它的坐標(biāo)原點(diǎn).以父控件的左上角為(0.0)點(diǎn).anchorPoint:它是決點(diǎn)CALayer身上哪一個(gè)點(diǎn)會(huì)在position屬性所指的位置anchorPoint是以當(dāng)前的layer左上角為原點(diǎn)(0.0),它的取值范圍是0~1,默認(rèn)位置在中間也就是(0.5,0.5).anchorPoint又稱錨點(diǎn).就是把錨點(diǎn)定到position所指的位置.兩者結(jié)合使用.想要修改某個(gè)控件的位置,我們可以設(shè)置它的position點(diǎn).設(shè)置完畢后.layer身上的anchorPoint會(huì)自動(dòng)定到position所在的位置.

position和anchorpint圖示

隱式動(dòng)畫.

4.1 什么是隱式動(dòng)畫?

了解什么是隱式動(dòng)畫前,要先了解什么是根層和非根層.根層:UIView內(nèi)部自動(dòng)關(guān)聯(lián)著的那個(gè)layer我們稱它是根層.非根層:自己手動(dòng)創(chuàng)建的層,稱為非根層.

隱式動(dòng)畫就是當(dāng)對(duì)非根層的部分屬性進(jìn)行修改時(shí), 它會(huì)自動(dòng)的產(chǎn)生一些動(dòng)畫的效果.我們稱這個(gè)默認(rèn)產(chǎn)生的動(dòng)畫為隱式動(dòng)畫.這些屬性稱為Animatable Properties(可動(dòng)畫屬性)啸澡。也就是 手動(dòng)創(chuàng)建的CALayer對(duì)象,都存在著隱式動(dòng)畫

列舉常見的Animatable Properties:

bounds:CALayer的寬度和高度氮帐,修改時(shí)產(chǎn)生縮放動(dòng)畫嗅虏。

backgroundColor:背景顏色,修改時(shí)產(chǎn)生背景顏色漸變動(dòng)畫效果上沐。

position:CALayer的位置皮服,修改時(shí)產(chǎn)生平移動(dòng)畫

例:

如何取消隱式動(dòng)畫?首先要了解動(dòng)畫底層是怎么做的.動(dòng)畫的底層是包裝成一個(gè)事務(wù)來進(jìn)行的.什么是事務(wù)?很多操作綁定在一起,當(dāng)這些操作執(zhí)行完畢后,才去執(zhí)行下一個(gè)操作.

因此我們自己開啟事務(wù),并在事物中設(shè)置沒有動(dòng)畫就會(huì)隱藏動(dòng)畫了

//開啟事務(wù)[CATransaction begin];//設(shè)置事務(wù)沒有動(dòng)畫[CATransaction setDisableActions:YES];//設(shè)置動(dòng)畫執(zhí)行的時(shí)長(zhǎng)[CATransaction setAnimationDuration:2];//這其中修改屬性就沒有動(dòng)畫了//提交事務(wù)[CATransaction commit];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末参咙,一起剝皮案震驚了整個(gè)濱河市龄广,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕴侧,老刑警劉巖择同,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異净宵,居然都是意外死亡敲才,警方通過查閱死者的電腦和手機(jī)裹纳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來归斤,“玉大人痊夭,你說我怎么就攤上這事≡嗬铮” “怎么了她我?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)迫横。 經(jīng)常有香客問我番舆,道長(zhǎng),這世上最難降的妖魔是什么矾踱? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任恨狈,我火速辦了婚禮,結(jié)果婚禮上呛讲,老公的妹妹穿的比我還像新娘禾怠。我一直安慰自己,他們只是感情好贝搁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布吗氏。 她就那樣靜靜地躺著,像睡著了一般雷逆。 火紅的嫁衣襯著肌膚如雪弦讽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天膀哲,我揣著相機(jī)與錄音往产,去河邊找鬼。 笑死某宪,一個(gè)胖子當(dāng)著我的面吹牛仿村,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兴喂,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼奠宜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了瞻想?” 一聲冷哼從身側(cè)響起压真,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蘑险,沒想到半個(gè)月后滴肿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佃迄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年泼差,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贵少。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堆缘,死狀恐怖滔灶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吼肥,我是刑警寧澤录平,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站缀皱,受9級(jí)特大地震影響斗这,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啤斗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一表箭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钮莲,春花似錦免钻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至握童,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叛赚,已是汗流浹背澡绩。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俺附,地道東北人肥卡。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像事镣,于是被迫代替她去往敵國(guó)和親步鉴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果璃哟,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜氛琢,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,094評(píng)論 5 13
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果随闪,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜阳似,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,465評(píng)論 6 30
  • 在iOS實(shí)際開發(fā)中常用的動(dòng)畫無非是以下四種:UIView動(dòng)畫铐伴,核心動(dòng)畫撮奏,幀動(dòng)畫俏讹,自定義轉(zhuǎn)場(chǎng)動(dòng)畫。 1.UIView...
    請(qǐng)叫我周小帥閱讀 3,078評(píng)論 1 23
  • 一畜吊、定時(shí)任務(wù) 方法1:performSelector 方法2:GCD 方法3:NSTimer NSTimer「定時(shí)...
    _涼風(fēng)_閱讀 1,283評(píng)論 2 8