iOS CoreAnimation教程 第二篇
今天主要講解圖層的strokeStart strokeEnd 屬性。
strokeStart strokeEnd兩個屬性的預設值都是0-1 ,值的大小大概意思是描述了有多少路徑畫完。想象下你小時候寫英文時候一筆下來的過程,下面會用動畫描述生成的過程。
一般這兩個屬性會結合CAShaperLayer使用,看兩個效果。
具體程式碼實現
UIBezierPath *rectanglePath = [UIBezierPath bezierPath];
//這個是第二個效果
[rectanglePath moveToPoint:CGPointMake(0, 177)];
[rectanglePath addLineToPoint:CGPointMake(185, 177)];
[rectanglePath addLineToPoint:CGPointMake(185, 0)];
[rectanglePath addLineToPoint:CGPointMake(0, 0)];
[rectanglePath addLineToPoint:CGPointMake(0, 177)];
[rectanglePath closePath];
//這個是第一個效果
// [rectanglePath moveToPoint:CGPointMake(185, 177)];
// [rectanglePath addLineToPoint:CGPointMake(185, 0)];
// [rectanglePath addLineToPoint:CGPointMake(0, 0)];
// [rectanglePath addLineToPoint:CGPointMake(0, 177)];
// [rectanglePath addLineToPoint:CGPointMake(185, 177)];
// [rectanglePath closePath];
CAShapeLayer * rectangle = [CAShapeLayer layer];
rectangle.frame = CGRectMake(83, 206, 185, 177);
rectangle.fillColor = [UIColor colorWithRed:0.937 green: 0.431 blue:0.268 alpha:1].CGColor;
rectangle.strokeColor = [UIColor colorWithRed:0.129 green: 0.151 blue:0.404 alpha:1].CGColor;
rectangle.lineWidth = 8;
rectangle.strokeStart = 0.4;
rectangle.strokeEnd = 1;
rectangle.path = rectanglePath.CGPath;
[self.view.layer addSublayer:rectangle];
程式碼大概解釋如下:
- 用貝塞爾曲線生成一個路徑,注意這個路徑座標Y軸是向下的。
- 用CAShaperLayer建立一個圖層依據剛才的路徑,並設定座標,填充色,邊框色,邊框的粗細。
- 最後新增到layer上。
但是為什麼效果不一樣呢?這個就是注意地方:
strokeStart strokeEnd這兩個屬性預設strokeStart 是0,strokeEnd是1。這個屬性的效果和貝塞爾曲線生成開始的點的位置有關, 方向是逆時針方向。也就是你自己用鉛筆畫一個矩形的正筆畫和倒筆畫,同樣都是生成矩形,但是效果卻不一樣。
具體做一個動畫來解釋
UIBezierPath *rectanglePath = [UIBezierPath bezierPath];
// [rectanglePath moveToPoint:CGPointMake(0, 177)];
// [rectanglePath addLineToPoint:CGPointMake(185, 177)];
// [rectanglePath addLineToPoint:CGPointMake(185, 0)];
// [rectanglePath addLineToPoint:CGPointMake(0, 0)];
// [rectanglePath addLineToPoint:CGPointMake(0, 177)];
// [rectanglePath closePath];
[rectanglePath moveToPoint:CGPointMake(185, 177)];
[rectanglePath addLineToPoint:CGPointMake(185, 0)];
[rectanglePath addLineToPoint:CGPointMake(0, 0)];
[rectanglePath addLineToPoint:CGPointMake(0, 177)];
[rectanglePath addLineToPoint:CGPointMake(185, 177)];
[rectanglePath closePath];
CAShapeLayer * rectangle = [CAShapeLayer layer];
rectangle.frame = CGRectMake(83, 206, 185, 177);
rectangle.fillColor = [UIColor colorWithRed:0.937 green: 0.431 blue:0.268 alpha:1].CGColor;
rectangle.strokeColor = [UIColor colorWithRed:0.129 green: 0.151 blue:0.404 alpha:1].CGColor;
rectangle.lineWidth = 8;
rectangle.strokeStart = 0;
rectangle.strokeEnd = 1;
rectangle.path = rectanglePath.CGPath;
[self.view.layer addSublayer:rectangle];
//做動畫
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
animation.fromValue = [NSNumber numberWithFloat:0];
animation.toValue = [NSNumber numberWithFloat:1];
animation.duration = 1.5;
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = false;
[rectangle addAnimation:animation forKey:@"drawLineAnimation"];
在圖層上加了一個動畫描述了路徑的生成過程,下面看效果圖對比貝塞爾曲線點位置不同影響的結果。
相關文章
- ios之CoreAnimationiOS
- iOS 動畫之CoreAnimation(CALayer)iOS動畫
- iOS CoreAnimation 隱式動畫iOS動畫
- iOS效能優化 - 工具Instruments之CoreAnimationiOS優化
- CoreAnimation解析及中高階動畫實現動畫
- CoreGraphics,CoreAnimation實戰, 可互動動畫圖表動畫
- HBuilder打包iOS教程UIiOS
- 微信小程式之小白教程系列 第二篇 微信小程式 -- 入口微信小程式
- iOS11正式版降級iOS10.3.3教程 iOS11重刷教程iOS
- iOS 的更新提醒教程iOS
- iOS Touch ID使用教程iOS
- SpringCloud 教程 | 第二篇: 服務消費者(rest+ribbon)SpringGCCloudREST
- Firebase 教程: iOS 實時聊天iOS
- iOS 11開發教程(一)iOS
- 我推薦的IOS教程iOS
- SpringBoot非官方教程 | 第二篇:SpringBoot配置檔案詳解Spring Boot
- iOS流式即時通訊教程iOS
- IOS 蘋果內購最新教程iOS蘋果
- iOS中實現模糊效果教程iOS
- Xamarin iOS教程之警告檢視iOS
- iOS 8安裝教程圖解iOS圖解
- iOS Core Animation 簡明系列教程iOS
- iOS10 Beta版降級回iOS9.3.2教程iOS
- SQL Profile(第二篇)SQL
- MongoDB初探第二篇MongoDB
- SpringBoot進階教程 | 第二篇:日誌元件logback實現日Spring Boot元件
- iOS9.2-iOS9.3.3完美越獄教程圖文詳解iOS
- iOS 8.1.3-iOS8.4完美越獄詳細圖文教程iOS
- 轉載:SpringBoot非官方教程 | 第二篇:Spring Boot配置檔案詳解Spring Boot
- Flutter外掛iOS端開發教程FlutteriOS
- iOS-最全的App上架教程iOSAPP
- iOS Touch ID 簡易開發教程iOS
- Xamarin iOS教程之自定義檢視iOS
- 寫給iOS小白的MVVM教程(序)iOSMVVM
- 逆向分析方向第二篇
- nginx事件模組 -- 第二篇Nginx事件
- [第二篇]——Docker 架構Docker架構
- ios10怎麼降級到ios9.3.2 ios10降級教程方法iOS