iOS-繪製圖層-CALayer的屬性

来源:https://www.cnblogs.com/CoderAlex/archive/2018/03/28/8664504.html
-Advertisement-
Play Games

一、position和anchorPoint 1.簡單介紹 CALayer有2個非常重要的屬性:position和anchorPoint @property CGPoint position; 用來設置CALayer在父層中的位置 以父層的左上角為原點(0, 0) @property CGPoint ...


 

一、position和anchorPoint

1.簡單介紹

CALayer有2個非常重要的屬性:position和anchorPoint

@property CGPoint position;

用來設置CALayer在父層中的位置

以父層的左上角為原點(0, 0)

 

@property CGPoint anchorPoint;

稱為“定位點”、“錨點”

決定著CALayer身上的哪個點會在position屬性所指的位置

以自己的左上角為原點(0, 0)

它的x、y取值範圍都是0~1,預設值為(0.5, 0.5)

2.圖示

anchorPoint

它的取值為0~1

 

紅色圖層的anchorPoint為(0,0)

紅色圖層的anchorPoint為(0.5,0.5)

紅色圖層的anchorPoint為(1,1)

紅色圖層的anchorPoint為(0.5,0)

position和anchorPoint

添加一個紅色圖層到綠色圖層上,紅色圖層顯示到什麼位置,由position屬性決定

假設紅色圖層的position是(100,100)

  到底把紅色圖層的哪個點移動到(100,100)的坐標位置,錨點。

  紅色圖層的錨點是(0,0)

紅色圖層的錨點是(0.5,0.5)

紅色圖層的錨點是(1,1)

紅色圖層的錨點是(0.5,0)

3.代碼示例

(1)沒有設置錨點。預設的錨點位置為(0.5,0.5)

複製代碼
 1 //
 2 //  YYViewController.m
 3 //  03-錨點等屬性
 4 //
 5 //  Created by apple on 14-6-21.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20     //創建圖層
21     CALayer *layer=[CALayer layer];
22     //設置圖層的屬性
23     layer.backgroundColor=[UIColor redColor].CGColor;
24     layer.bounds=CGRectMake(0, 0, 100, 100);
25     //添加圖層
26     [self.view.layer addSublayer:layer];
27     
28 }
29 
30 @end
複製代碼

顯示效果:

         

(1)設置錨點位置為(0,0)

複製代碼
 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     //創建圖層
 5     CALayer *layer=[CALayer layer];
 6     //設置圖層的屬性
 7     layer.backgroundColor=[UIColor redColor].CGColor;
 8     layer.bounds=CGRectMake(0, 0, 100, 100);
 9     //設置錨點為(0,0)
10     layer.anchorPoint=CGPointZero;
11     //添加圖層
12     [self.view.layer addSublayer:layer];
13 }
14 @end
複製代碼

顯示效果:

二、隱式動畫

1.簡單說明

每一個UIView內部都預設關聯著一個CALayer,我們可用稱這個Layer為Root Layer(根層)

所有的非Root Layer,也就是手動創建的CALayer對象,都存在著隱式動畫

什麼是隱式動畫?

當對非Root Layer的部分屬性進行修改時,預設會自動產生一些動畫效果

而這些屬性稱為Animatable Properties(可動畫屬性)

 

列舉幾個常見的Animatable Properties:

bounds:用於設置CALayer的寬度和高度。修改這個屬性會產生縮放動畫

backgroundColor:用於設置CALayer的背景色。修改這個屬性會產生背景色的漸變動畫

position:用於設置CALayer的位置。修改這個屬性會產生平移動畫

2.代碼示例

複製代碼
 1 //
 2 //  YYViewController.m
 3 //  04-隱式動畫
 4 //
 5 //  Created by apple on 14-6-21.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 @property(nonatomic,strong)CALayer *layer;
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20     //創建圖層
21     CALayer *mylayer=[CALayer layer];
22     //設置圖層屬性
23     mylayer.backgroundColor=[UIColor brownColor].CGColor;
24     mylayer.bounds=CGRectMake(0, 0, 150, 100);
25     //顯示位置
26     mylayer.position=CGPointMake(100, 100);
27     mylayer.anchorPoint=CGPointZero;
28     mylayer.cornerRadius=20;
29     //添加圖層
30     [self.view.layer addSublayer:mylayer];
31     self.layer=mylayer;
32 }
33 
34 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
35 {
36     //隱式動畫
37     self.layer.bounds=CGRectMake(0, 0, 200, 60);
38     self.layer.backgroundColor=[UIColor yellowColor].CGColor;
39 }
40 @end
複製代碼

效果:

        

關閉隱式動畫:

1     [CATransaction begin];
2     [CATransaction setDisableActions:YES];
3     //隱式動畫
4     self.layer.bounds=CGRectMake(0, 0, 200, 60);
5     self.layer.backgroundColor=[UIColor yellowColor].CGColor;
6     [CATransaction commit];

3.如何查看CALayer的某個屬性是否支持隱式動畫?

  可以查看頭文件,看有沒有Animatable,如果有則表示支持。

也可以查看官方文檔

文檔中標明的這些屬性都是支持隱式動畫的

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文會著重介紹一下YCSB測試遠程完全分散式集群的操作差異。雖然網上有很多介紹YCSB測試HBase的文章,但都是針對本地HBase偽分散式集群的。大家都知道,稍微正式一些的壓測都會要求測試客戶端與目標集群分離部署,而且偽分散式集群通常不會在生產環境下使用,本身也沒有太大的壓測意義。 ...
  • 1.1 查看mysql的安裝路徑: [root@bogon ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz 1.2 查看mysql的安裝包: ...
  • About SQL*Plus SQL*Plus is the primary command-line interface to your Oracle database. You use SQL*Plus to start up and shut down the database, set da ...
  • 使用BLOB欄位來保存圖片是不是一個好的方法還存在爭議,小圖片除外。更常用的方法是將圖片保存為一個文件,然後只在數據中保存圖片文件的元數據,比如文件的路徑。但是,如果你想把數據文件(初始數據)打包成一個文件放在你的應用中,這倒是一個很好的方法。 SQLite在iOS設備上運行要比在模擬器上運行慢的多 ...
  • 閱讀目錄 介紹 R 文件的內容 介紹 通過 R 文件引用資源 一、R 文件的內容 在 Android Studio 中 R 文件位於 app -> build -> generated -> source -> r -> debug -> 包名 -> R 要註意幾點: R 文件的本質是一個 java ...
  • 微信公眾號:CodeId有什麼建議可以到公眾號里進行留言。 很高興又和大家見面了,最近寫了個小游戲——2048,這個游戲實現起來不是很難,感覺它對自己的邏輯能力起到一個訓練作用,還不錯,所以今天分享給大家。我是通過小程式寫的,源碼已經放到GitHub上了https://github.com/Craz ...
  • RadioButton的圖標大小並沒有相應的佈局參數,本文通過自定義屬性的方式自定義RadioButton,實現控製圖片大小。 ...
  • 一、介紹 最近一直在做有關JavaScriptCore的技術需求,上周發現一個問題,當在JavaScriptCore在垃圾回收時,項目會有一定幾率發生崩潰。崩潰發生時調用堆棧如下: 圖1 調用堆棧 圖1 調用堆棧 先對上圖中兩個比較重要的堆棧過程做個說明: 圖2 生成JSValue 圖2 生成JSV ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...