亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS CoreAnimation 圖層幾何學

2020-07-26 02:53:49
字體:
來源:轉載
供稿:網友

布局

UIView中與位置,尺寸有關的屬性有 frame bounds center在此不多贅述,在CALayer中同樣有與其相對應的屬性 frame bounds position 需要注意的是 centerposition 雖然字面表達不一樣,但是其功能是一致的,為了更加清晰的展示以上內容,我在故事板中創建一個有色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}

根據日志所打印內容可知 UIView與CALayer 的布局屬性是一一對應的.

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

圖片二

在控制臺打印日志:

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

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

圖片三

圖片三與圖片二相比我們可以發現,frame實際上代表了覆蓋在圖層旋轉之后的整個軸對齊的矩形區域.

錨點-anchorPoint

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

customView_layer_anchorPoint:{0.5, 0.5}

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

圖片四

將綠色視圖的錨點設置為(0.0).

綠色視圖的錨點在綠色視圖的左上角.

圖片五

再做一次實現,我將綠色視圖的錨點設置為(1,1).也就是將錨點設置在綠色視圖的右下角.

圖片六

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

//(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}

由兩個數據對比可得,錨點的改變只會改變 frame.

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

圖片七

圖片八

對比兩個GIF,可以知道視圖的旋轉是以錨點為中心進行旋轉的.

坐標系

坐標系無非就是(x,y,z),我不對(x,y)進行講解,著重講解一下z.在視圖坐標系中,z軸與我們在數學中的z軸是有相同的效果的,他表現的是垂直的坐標,如果我們為圖層設置z軸坐標該圖層將會在未設置z軸坐標或者小于該z軸坐標的圖層上方展示.為了著重表現該現象,我在綠色視圖中添加一個藍色圖層與紅色圖層,先看一下代碼清單.

 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];

由代碼可以發現先添加的藍色圖層后添加的紅色圖層,因此紅色圖層在最上方.

圖片九

將藍色的圖層的z軸坐標設置為1.0f.

圖片十

Hit Testing

CALayer 是不關心響應鏈事件的,但是它提供了兩個方法來處理事件.

  • -containsPoint:
  • -hitTest:

-containsPoint: 接受一個在本圖層坐標系下的CGPoint,如果這個點在圖層frame范圍內就返回YES,否則返回NO.為了理解這一性質我寫一個小案例,在以后的藍色圖層和白色圖層中點擊,如果點擊藍色區域控制臺打印blue,如果在白色區域控制臺打印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,通過判斷返回的圖層是否是所要響應的圖層然后做出相應的操作,繼續上面的案例稍加改動.

- (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"); }}

自動布局

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

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

當圖層的bounds發生改變,或者圖層的-setNeedsLayout方法被調用的時候,這個函數就會執行.這時可以手動的對圖層進行重新繪制,但是不能像UIViewautoresizingMaskconstraints屬性做到自適應屏幕旋轉.這也是為什么最好使用視圖而不是單獨的圖層來構建應用程序的重要原因之一.

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美亚洲xxxx乳在线观看| 亚洲人成网7777777国产| 日韩福利伦理影院免费| 国产精品久久久一区| 国产精品视频1区| 亚洲自拍偷拍视频| 亚洲激情在线观看视频免费| 日韩三级影视基地| 久久久精品亚洲| 亚洲综合中文字幕在线| 午夜精品久久久久久99热| 日韩在线免费观看视频| 日韩a**中文字幕| 亚洲最大av网| 在线视频亚洲欧美| 97人洗澡人人免费公开视频碰碰碰| 久久久久久久一区二区三区| 欧美黄色小视频| 国产精品久久久久久久久久久不卡| 欧美另类在线播放| 操日韩av在线电影| 欧美国产日韩二区| 另类色图亚洲色图| 亚洲日本成人女熟在线观看| 国产日本欧美一区二区三区| 亚洲成人av在线播放| 国产欧美精品久久久| 国产在线视频不卡| 久久久久久有精品国产| 亚洲最新av在线网站| 国产成人97精品免费看片| 亚洲成人1234| 亚洲精品v天堂中文字幕| 日韩精品一区二区三区第95| 国产精品精品国产| 91精品在线播放| 欧美色图在线视频| 久久久久久久久久av| 91在线国产电影| 亚洲曰本av电影| 日韩成人av在线播放| 亚洲精品福利视频| 精品久久久久久国产| 成人黄色大片在线免费观看| 欧美日韩国产影院| 97欧美精品一区二区三区| 成人性生交大片免费观看嘿嘿视频| 亚洲国产欧美一区二区丝袜黑人| 成人做爰www免费看视频网站| 欧美网站在线观看| 亚洲a区在线视频| 久久影视电视剧免费网站清宫辞电视| 都市激情亚洲色图| 成人写真福利网| 国产精品三级久久久久久电影| 久久综合免费视频影院| 在线观看国产精品淫| 95av在线视频| 97香蕉久久超级碰碰高清版| 在线亚洲午夜片av大片| 久久这里有精品视频| 国产精品久久久久影院日本| 亚洲女人被黑人巨大进入| 国产免费一区视频观看免费| 国产精品99一区| 中文字幕久久亚洲| 国产一区二区三区在线视频| 欧美日韩高清在线观看| 热99久久精品| 久久久这里只有精品视频| 亚洲黄页网在线观看| 日韩成人av一区| 成人午夜高潮视频| 久久久综合av| 九九精品在线观看| 国产香蕉97碰碰久久人人| 欧美激情2020午夜免费观看| 92福利视频午夜1000合集在线观看| 91国产视频在线播放| 亚洲人成在线播放| 亚州成人av在线| 欧美精品中文字幕一区| 国产91色在线免费| 国内精久久久久久久久久人| 亚洲国产另类久久精品| 成人国产精品av| 精品国产乱码久久久久久天美| 亚洲日本中文字幕免费在线不卡| 最好看的2019年中文视频| 欧美三级欧美成人高清www| 亚州国产精品久久久| 欧美成aaa人片免费看| 成人高h视频在线| 亚洲网站在线看| 欧美性在线观看| 精品视频在线播放| 一级做a爰片久久毛片美女图片| 九九久久精品一区| 视频一区视频二区国产精品| 日韩美女毛茸茸| 日韩精品视频免费在线观看| 永久免费看mv网站入口亚洲| 一本一道久久a久久精品逆3p| 欧美激情a在线| 亚洲乱码国产乱码精品精天堂| 亚洲人成毛片在线播放| 国产日韩欧美夫妻视频在线观看| 91色中文字幕| 亚洲人成电影网站色| 日韩免费av片在线观看| 亚洲丁香久久久| 亚洲免费小视频| 久久国产精品久久精品| 91久久久久久久久久久久久| 精品久久久久久中文字幕大豆网| 亚洲一区二区三区xxx视频| 另类专区欧美制服同性| 日韩电视剧免费观看网站| 久久久久久久影视| 亚洲自拍偷拍福利| 日韩在线播放一区| 欧洲亚洲免费视频| 成人网中文字幕| 色偷偷噜噜噜亚洲男人的天堂| 国产精品久久国产精品99gif| 成人福利网站在线观看11| 欧美黑人xxx| 久热99视频在线观看| 欧美丰满少妇xxxxx做受| 国产一区二区成人| 亚洲国产日韩一区| 91亚洲精品久久久| 亚洲精品在线视频| 亚洲精品欧美日韩专区| 亚洲欧美精品suv| 久久视频在线观看免费| 97在线视频免费| 色偷偷亚洲男人天堂| 亚洲丁香久久久| 亚洲图中文字幕| 日本欧美爱爱爱| 欧美电影在线免费观看网站| 亚洲欧洲在线播放| 日本不卡免费高清视频| 色婷婷久久一区二区| 国产精品678| 久久夜精品香蕉| 久久精品福利视频| 日韩大片免费观看视频播放| 久久久精品网站| 51视频国产精品一区二区| 国产精品青草久久久久福利99| 日韩美女视频免费看| 精品一区精品二区| 国产精品久久久久久久久免费看| 久久人人爽人人爽人人片av高清| 亚洲精品国产精品乱码不99按摩| 一区二区三区精品99久久| 北条麻妃一区二区三区中文字幕| 亚洲影视中文字幕| 97国产一区二区精品久久呦| 欧美午夜无遮挡| 中文字幕免费精品一区高清| 亚洲欧洲高清在线|