何為SVG
簡言之,svg就是一種二維的矢量圖形格式职车,可以用過Adobe公司的AI來生成瘫俊。
應用場景
直接進入主題,到底有哪些開發(fā)場景我們可以用SVG悴灵?SVG究竟有什么優(yōu)勢扛芽?
1.繪制簡單的圖形,無需額外增加引入圖片的開銷
先看一張網(wǎng)上找的動圖
推特的啟屏logo其實是個很簡單的圖案积瞒,我們普通的app中也不乏這類簡單的圖片川尖,直接使用圖片的優(yōu)點是簡單,所見即所得茫孔,無需我們做過多的額外編碼工作空厌,缺點是需要占用資源來存儲這個圖片庐船。如果通過SVG的方式,我們只需要獲知這個SVG中的繪制路徑path嘲更,再運用到我們程序中執(zhí)行繪制筐钟,基本不消耗資源,也可得到相同的視覺效果赋朦,更重要的一點篓冲,通過這種方式繪制得到圖案,我們永遠不用去擔心圖案過度放大而導致的鋸齒問題,豈不美哉。
其實在這里svg只不過是我們獲取pah的一個載體而已刹前,我們真正使用到的是就是path。那么問題來了诽俯,我們?nèi)绾沃谱鱯vg來獲得path呢?前面有提到AI(并不是人工智能的AI)承粤,這里介紹另外一個工具--PaintCode暴区。paintCode提供快捷的繪制工具以及path的代碼生成功能,我們只需要從中復制出路徑即可,如圖
這里從網(wǎng)上找了一個對鉤的圖片辛臊,然后再用鋼筆工具在上面描點仙粱,繪制出他的路徑,paintcode自動就在底下代碼區(qū)生成了OC的代碼彻舰,當然伐割,也可以生成swift,或者安卓端的java代碼刃唤。接下來就是把路徑繪制到我們的視圖上了.
先添加一個CAShapeLayer
-(void)addLayerToContainerView
{
//self.containerView是我添加的一個顯示nike對鉤的UIVIew容器
CAShapeLayer *layer = [[CAShapeLayer alloc]init];
layer.path = [self setBezierPath].CGPath;
layer.bounds = CGPathGetBoundingBox(layer.path);
self.containerView.backgroundColor = [UIColor blueColor];
layer.position = CGPointMake(self.view.layer.bounds.size.width / 2, self.view.layer.bounds.size.height/ 2);
layer.fillColor = [UIColor whiteColor].CGColor;
[self.containerView.layer addSublayer:layer];
}
獲取path
-(UIBezierPath *)setBezierPath
{
// 這里面加入的就是剛剛PaintCode粘貼出來的代碼
}
接下來要做的事就是給containerView加動畫咯隔心,實現(xiàn)方式就太多了,自己實現(xiàn)吧~
先到這里尚胞,后面會再介紹一下其他的應用場景硬霍。