【iOS】波浪動畫實現(xiàn)

最近項目中用到了一個波浪動畫,于是我又重新復習了一遍正弦函數(shù),并簡單地封裝了一個自定義視圖。下面為大家介紹封裝自定義視圖的過程。

正弦曲線

要想實現(xiàn)波浪動畫,我們首先需要繪制出一條正弦曲線。所以第一步需要重寫自定義視圖的drawRect方法,在drawRect方法里繪制正弦曲線。正弦曲線的公式為:y=Asin(ωx+φ)+k,A為振幅,ω為角速度,φ為初相,k為偏距。

我們可以在0 <= x <= self.bounds.size.width的范圍內取x的有限個值,并根據(jù)公式y(tǒng)=Asin(ωx+φ)+k算出y的值,來獲取正弦曲線上的有限個點,并連接各個點,形成正弦曲線。因此這里我們利用CGPathCreateMutable創(chuàng)建了一條可變路徑,并依次連接上述各點,形成了一條正弦曲線。代碼如下:

- (void)drawRect:(CGRect)rect
{
    CGContextRef cxt = UIGraphicsGetCurrentContext();
    //初始化運動路徑
    CGMutablePathRef path = CGPathCreateMutable();
    //設置起始位置
    CGPathMoveToPoint(path, nil, 0, self.bounds.size.height);
    //正弦曲線公式為:y=Asin(ωx+φ)+k;
    for (CGFloat x = 0.0f; x <= self.bounds.size.width; x++) {
        CGFloat y = self.alpha * sinf(self.omega * x + self.phi) + self.kappa;
        CGPathAddLineToPoint(path, nil, x, y);
    }
    CGPathAddLineToPoint(path, nil, self.bounds.size.width, self.bounds.size.height);
    CGPathCloseSubpath(path);
    //繪制曲線
    CGContextSetFillColorWithColor(cxt, [UIColor orangeColor].CGColor);
    CGContextSetLineWidth(cxt, 0.5);
    CGContextAddPath(cxt, path);
    CGContextFillPath(cxt);
    CGPathRelease(path);
    
}

波浪效果

正弦曲線畫好之后,第二步就是讓曲線動起來,形成波浪的效果。所以我們需要創(chuàng)建定時器,讓曲線不停地向左或向右移動起來。想移動波形向左或者向右,那么應該是先化為這個形式的式子y=Asin[ω(x+φ/ω)],如果想向右移動m角度,就變?yōu)閥=Asin[ω(x+φ/ω-m)],反之,向左移動的話變?yōu)閥=Asin[ω(x+φ/ω+m)]。這里我們采取向右移動,因此每次都要在原來初相的基礎上減去ω*m,代碼如下:

- (void)handleDisplay
{
    if (!self.isHidden) {
        self.phi -= self.speed * self.omega;
        [self setNeedsDisplay];
    }
}

總結
以上為封裝自定義視圖的整體思路,希望可以幫到大家,需要下載Demo的可以前往我的github:Github地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容