最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS CoreAnimation 圖層幾何學(xué)

 更新時間:2017年03月16日 10:25:28   作者:旭寶愛吃魚  
本文主要介紹了iOS CoreAnimation圖層幾何學(xué),圖層幾何所講主要是有關(guān)圖層的位置,尺寸等幾何類屬性。具有很好的參考價值。下面跟著小編一起來看下吧

布局

UIView中與位置,尺寸有關(guān)的屬性有 frame bounds center在此不多贅述,在CALayer中同樣有與其相對應(yīng)的屬性 frame bounds position 需要注意的是 centerposition 雖然字面表達(dá)不一樣,但是其功能是一致的,為了更加清晰的展示以上內(nèi)容,我在故事板中創(chuàng)建一個有色UIView.

圖片一

在控制臺打印日志:

customView_frame:{{117, 241}, {140, 185}}
customView_bounds:{{0, 0}, {140, 185}}
customView_center:{187, 333.5}
customView_layer_frame:{{117, 241}, {140, 185}}
customView_layer_bounds:{{0, 0}, {140, 185}}
customView_layer_position:{187, 333.5}

根據(jù)日志所打印內(nèi)容可知 UIView與CALayer 的布局屬性是一一對應(yīng)的.

以上內(nèi)容了解后我們需要直達(dá)frame本質(zhì)上是一個復(fù)合的屬性,也就是說他是由bounds position transform計(jì)算得到的(transform:放大,旋轉(zhuǎn)等).為了證實(shí)這件事,我們將上面的有色View旋轉(zhuǎn)一個角度.

圖片二

在控制臺打印日志:

customView_layer_frame:{{80.128221735089298, 218.39265014993941}, {213.74355652982138, 230.21469970012117}}
customView_layer_bounds:{{0, 0}, {140, 185}}
customView_layer_position:{187, 333.5}

通過對比兩次打印日志的對比不難發(fā)現(xiàn),當(dāng)我們將圖層旋轉(zhuǎn)后 bounds position 都沒有改變,而 frame 卻大有改變.那么問題來了,此時的 frame 代表的是什么?我們以customView_layer_frame為 frame 在視圖上添加一個新的視圖并且將其作為旋轉(zhuǎn)視圖的背景.

圖片三

圖片三與圖片二相比我們可以發(fā)現(xiàn),frame實(shí)際上代表了覆蓋在圖層旋轉(zhuǎn)之后的整個軸對齊的矩形區(qū)域.

錨點(diǎn)-anchorPoint

錨點(diǎn)這個詞初識是很陌生的,好比航船的錨用來固定航船,圖層中的錨點(diǎn)也具有相同的功能,錨點(diǎn)可以 固定 圖層,也就是說錨點(diǎn)是圖層的句柄.默認(rèn)情況下錨點(diǎn)位于圖層的中點(diǎn),我們將圖二的的錨點(diǎn)打印.

customView_layer_anchorPoint:{0.5, 0.5}

我了便于觀察,我在已有的 UIView 上面添加一個同樣大小位置顯色不同的UIView(在橙色視圖上面添加一個綠色視圖,綠色視圖的錨點(diǎn)在綠色視圖的中心點(diǎn)).

圖片四

將綠色視圖的錨點(diǎn)設(shè)置為(0.0).

綠色視圖的錨點(diǎn)在綠色視圖的左上角.

圖片五

再做一次實(shí)現(xiàn),我將綠色視圖的錨點(diǎn)設(shè)置為(1,1).也就是將錨點(diǎn)設(shè)置在綠色視圖的右下角.

圖片六

改變錨點(diǎn)可以蓋面綠色視圖的展示效果,那么此時的 bounds position frame 呢?我在控制臺打印錨點(diǎn)為(0.5,0.5)與(1,1)時的數(shù)據(jù).

//(0.5,0.5)
customView_layer_frame:{{0, 0}, {140, 185}}
customView_layer_bounds:{{0, 0}, {140, 185}}
customView_layer_position:{70, 92.5}
//(1,1)
customView_layer_frame:{{-70, -92.5}, {140, 185}}
customView_layer_bounds:{{0, 0}, {140, 185}}
customView_layer_position:{70, 92.5}

由兩個數(shù)據(jù)對比可得,錨點(diǎn)的改變只會改變 frame.

到此錨點(diǎn)的基本概念已經(jīng)基本了解,那么錨點(diǎn)用在什么地方呢?在這我列舉一個簡單的用法.現(xiàn)在我將錨點(diǎn)為(0.5,0.5)與(1,1)的綠色視圖分別進(jìn)行旋轉(zhuǎn)(持續(xù)).

圖片七

圖片八

對比兩個GIF,可以知道視圖的旋轉(zhuǎn)是以錨點(diǎn)為中心進(jìn)行旋轉(zhuǎn)的.

坐標(biāo)系

坐標(biāo)系無非就是(x,y,z),我不對(x,y)進(jìn)行講解,著重講解一下z.在視圖坐標(biāo)系中,z軸與我們在數(shù)學(xué)中的z軸是有相同的效果的,他表現(xiàn)的是垂直的坐標(biāo),如果我們?yōu)閳D層設(shè)置z軸坐標(biāo)該圖層將會在未設(shè)置z軸坐標(biāo)或者小于該z軸坐標(biāo)的圖層上方展示.為了著重表現(xiàn)該現(xiàn)象,我在綠色視圖中添加一個藍(lán)色圖層與紅色圖層,先看一下代碼清單.

 CALayer * blueLayer = [[CALayer alloc]init];
 blueLayer.frame = self.greenView.layer.frame;
 blueLayer.backgroundColor = [UIColor blueColor].CGColor;
 CALayer * redLayer = [[CALayer alloc]init];
 redLayer.frame = self.greenView.layer.frame;
 redLayer.backgroundColor = [UIColor redColor].CGColor;
 [self.greenView.layer addSublayer:blueLayer];
 [self.greenView.layer addSublayer:redLayer];

由代碼可以發(fā)現(xiàn)先添加的藍(lán)色圖層后添加的紅色圖層,因此紅色圖層在最上方.

圖片九

將藍(lán)色的圖層的z軸坐標(biāo)設(shè)置為1.0f.

圖片十

Hit Testing

CALayer 是不關(guān)心響應(yīng)鏈?zhǔn)录?但是它提供了兩個方法來處理事件.

  • -containsPoint:
  • -hitTest:

-containsPoint: 接受一個在本圖層坐標(biāo)系下的CGPoint,如果這個點(diǎn)在圖層frame范圍內(nèi)就返回YES,否則返回NO.為了理解這一性質(zhì)我寫一個小案例,在以后的藍(lán)色圖層和白色圖層中點(diǎn)擊,如果點(diǎn)擊藍(lán)色區(qū)域控制臺打印blue,如果在白色區(qū)域控制臺打印white.

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
 CGPoint point = [[touches anyObject]locationInView:self.view];
 point = [self.blueLayer convertPoint:point fromLayer:self.view.layer];
 if ([self.blueLayer containsPoint:point]) {
  NSLog(@"blue");
 }else{
  NSLog(@"white");
 }
}

-hitTest: 也是接受一個 CGPoint 但是返回的是 CALayer,通過判斷返回的圖層是否是所要響應(yīng)的圖層然后做出相應(yīng)的操作,繼續(xù)上面的案例稍加改動.

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
 CGPoint point = [[touches anyObject]locationInView:self.view];
 CALayer * layer = [self.view.layer hitTest:point];
 if (layer == self.blueLayer) {
  NSLog(@"blue");
 }else{
  NSLog(@"white");
 }
}

自動布局

當(dāng)使用視圖的時候,可以充分利用UIViewUIViewAutoresizingMaskNSLayoutConstraint進(jìn)行自動布局,但是如果想要隨意控制CALayer的布局,就需要通過使用 CALayerDelegate .如下函數(shù):

 - (void)layoutSublayersOfLayer:(CALayer *)layer;

當(dāng)圖層的bounds發(fā)生改變,或者圖層的-setNeedsLayout方法被調(diào)用的時候,這個函數(shù)就會執(zhí)行.這時可以手動的對圖層進(jìn)行重新繪制,但是不能像UIViewautoresizingMaskconstraints屬性做到自適應(yīng)屏幕旋轉(zhuǎn).這也是為什么最好使用視圖而不是單獨(dú)的圖層來構(gòu)建應(yīng)用程序的重要原因之一.

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 詳解 iOS 系統(tǒng)中的視圖動畫

    詳解 iOS 系統(tǒng)中的視圖動畫

    這篇文章主要介紹了iOS 系統(tǒng)中的視圖動畫的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用ios開發(fā),感興趣的朋友可以了解下
    2021-02-02
  • IOS開發(fā)環(huán)境windows化攻略

    IOS開發(fā)環(huán)境windows化攻略

    本人主要介紹了IOS開發(fā)環(huán)境windows化攻略,需要的朋友可以參考下
    2013-06-06
  • IOS 使用Block二次封裝AFNetworking 3.0詳解

    IOS 使用Block二次封裝AFNetworking 3.0詳解

    這篇文章主要介紹了IOS 使用Block二次封裝AFNetworking 3.0詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 談一談iOS單例模式

    談一談iOS單例模式

    這篇文章主要和大家談一談iOS中的單例模式,單例模式是一種常用的軟件設(shè)計(jì)模式,想要深入了解iOS單例模式的朋友可以參考一下
    2016-05-05
  • iOS開發(fā)技巧之狀態(tài)欄字體顏色的設(shè)置方法

    iOS開發(fā)技巧之狀態(tài)欄字體顏色的設(shè)置方法

    有時候我們需要根據(jù)不同的背景修改狀態(tài)欄字體的顏色,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)技巧之狀態(tài)欄字體顏色的設(shè)置方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2018-08-08
  • iOS對數(shù)組進(jìn)行排序的實(shí)例代碼

    iOS對數(shù)組進(jìn)行排序的實(shí)例代碼

    本文通過實(shí)例代碼給大家講解了ios對數(shù)組進(jìn)行排序的實(shí)例方法,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-08-08
  • IOS微信端confirm以及alert去掉網(wǎng)址的實(shí)例代碼

    IOS微信端confirm以及alert去掉網(wǎng)址的實(shí)例代碼

    下面小編就為大家分享一篇IOS微信端confirm以及alert去掉網(wǎng)址的實(shí)例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS實(shí)現(xiàn)百度外賣頭像波浪的效果

    iOS實(shí)現(xiàn)百度外賣頭像波浪的效果

    對于現(xiàn)在很多人來說,叫外賣就成了不可或缺的習(xí)慣。某日瞬間發(fā)現(xiàn)百度外賣的APP波浪效果很是吸引人,相比較其他的外賣APP,顏值略高些.(淘寶也有波浪的效果),遂就思考如何實(shí)現(xiàn)這種"浪"的效果,下面來一起看看。
    2016-08-08
  • IOS 集成微信支付功能的實(shí)現(xiàn)方法

    IOS 集成微信支付功能的實(shí)現(xiàn)方法

    這篇文章主要介紹了IOS 集成微信支付功能的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 關(guān)于適配iOS11和iPhoneX的一些事

    關(guān)于適配iOS11和iPhoneX的一些事

    隨著iOS11和xcode9剛開始正式發(fā)布,小編也迫不及待的更新了xcode9,手機(jī)也順利更新到iOS,也終于見到iPhone X 的真面,怎么適配是個問題,下面這篇文章主要給大家介紹了關(guān)于適配iOS11和iPhoneX的一些事,需要的朋友可以參考下。
    2017-10-10

最新評論

昌图县| 惠水县| 锦州市| 甘孜| 调兵山市| 广安市| 乌审旗| 建阳市| 道孚县| 高阳县| 呼玛县| 宜丰县| 嘉鱼县| 仁化县| 灵山县| 英德市| 宝兴县| 东台市| 汪清县| 高邮市| 岗巴县| 麻栗坡县| 三江| 额敏县| 伊吾县| 大荔县| 长治市| 城市| 罗平县| 银川市| 隆德县| 无锡市| 米林县| 固安县| 大姚县| 交城县| 杂多县| 惠东县| 新安县| 米易县| 三明市|