iOS 漸變色水波紋

因項目需求封裝了一個帶有漸變色水波視圖,水波視圖相信大家可以在網上搜到很多,但是繪制一個波浪是漸變色的,且背景也可以徑向漸變的水波不多。

效果如如下:

水波紋.gif

實現以下功能:

  • 支持自定義水波形狀 (圓形和方形)
  • 支持自定義背景漸變
  • 支持自定義兩層水波獨立漸變色
  • 支持波紋周期、速度、振幅等自定義

附上Github Demo:SYMoireView

???覺得有用可以幫我star一下

1、CocoaPods集成

SYMoireView 目前已經支持CocoaPods,只要項目中有pod就可以很快通過pod導入進項目中直接使用。

SYMoireView 的安裝,最簡單的方法是使用CocoaPods,在Podfile里添加如下:

pod 'SYMoireView', '~> 1.0.0'

2、直接導入.h.m文件

或者直接將SYMoireView.hSYMoireView.m兩個源文件直接拖進自己的項目工程中。文件位置在??的Demo中

3、使用

  • 導入頭文件

1)cocoapods集成用 #import <SYMoireView.h>

  1. 導入.h和.m文件 #import "SYMoireView.h"
  • 使用
  //默認圓形波浪
    CGFloat waveWidth = 160;
    SYMoireView *waveView = [[SYMoireView alloc]initWithFrame:CGRectMake(100, 100, waveWidth, waveWidth)];
    [self.view addSubview:waveView];
    waveView.clipsToBounds = YES;
    waveView.insideColors = @[(__bridge id)mHexColor(0x209b93).CGColor,(__bridge id)mHexColor(0x27a192).CGColor];//內層
    waveView.outsideColors = @[(__bridge id)mHexColor(0x3cb4a6).CGColor,(__bridge id)mHexColor(0x70cfac).CGColor];//外層
    waveView.percent = 0.7;
    waveView.isRound = YES;//是否是圓形
    waveView.waveAmplitude = 50;
    [waveView startWave];
    
    //自定義背景漸變-圓形波浪
    SYMoireView *customWave = [[SYMoireView alloc] initWithFrame:CGRectMake(10, 420, waveWidth, waveWidth)];
    [self.view addSubview:customWave];
    customWave.insideColors = @[(__bridge id)mHexColor(0x209b93).CGColor,(__bridge id)mHexColor(0x27a192).CGColor];//內層
    customWave.outsideColors = @[(__bridge id)mHexColor(0x3cb4a6).CGColor,(__bridge id)mHexColor(0x70cfac).CGColor];//外層
    customWave.percent = 0.4;
    customWave.delegate = self;
    [customWave startWave];
    
    
    //方形波浪
    SYMoireView *rectWave = [[SYMoireView alloc] initWithFrame:CGRectMake(200, 560, 140, 100)];
    [self.view addSubview:rectWave];
    rectWave.insideColors = @[(__bridge id)mHexColor(0x209b93).CGColor,(__bridge id)mHexColor(0x27a192).CGColor];//內層
    rectWave.outsideColors = @[(__bridge id)mHexColor(0x3cb4a6).CGColor,(__bridge id)mHexColor(0x70cfac).CGColor];//外層
    rectWave.percent = 0.7;
    rectWave.isRound = NO;
    rectWave.delegate = self;
    [rectWave startWave];
  • 如果需要背景色自定義顏色漸變則需要遵循協議

rectWave.delegate = self;

<SYMoireViewDelegate>

  • 實現協議
//自定義背景漸變
- (void)drawBgGradient:(SYMoireView *)waveView context:(CGContextRef)context
{
    CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
    CGFloat compoents[8]={
        1.0,1.0,1.0,1.0,
        166/255.0,240/255.0,255.0/255.0,1
    };
    
    CGFloat locations[2]={0,0.7};
    CGGradientRef gradient= CGGradientCreateWithColorComponents(colorSpace, compoents, locations, 2);
    
    CGFloat width = CGRectGetWidth(waveView.frame);
    CGFloat height = CGRectGetHeight(waveView.frame);
    CGPoint center = CGPointMake(width/2, height/2);
    
    //    if (waveView == _rectWave) {
    //        //線性漸變
    //        CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(width, height), kCGGradientDrawsAfterEndLocation);
    //    } else {
    //徑向漸變
    CGContextDrawRadialGradient(context, gradient, center,0, center, width/2, kCGGradientDrawsAfterEndLocation);
    //    }
    
    CGColorSpaceRelease(colorSpace);
    CGGradientRelease(gradient);
}

漸變水波已經集成到我們的項目中了,當然SYMoireView還提供了一系列的對外屬性變量,使我們可以高度自定義水波,如下:

@property (nonatomic, assign) CGFloat percent;           // 百分比 (默認:0)
@property (nonatomic, assign) BOOL isRound;              // 圓形/方形 (默認:YES)
@property (nonatomic, assign) CGFloat waveAmplitude;     // 波紋振幅 (默認:0)
@property (nonatomic, assign) CGFloat waveCycle;         // 波紋周期 (默認:1.29 * M_PI / self.frame.size.width)
@property (nonatomic, assign) CGFloat waveSpeed;         // 波紋速度 (默認:0.2/M_PI)
@property (nonatomic, assign) CGFloat waveGrowth;        // 波紋上升速度 (默認:1.00)

@property (nonatomic, strong) NSArray *insideColors;     // 內層漸變的顏色數組 (有默認顏色)
@property (nonatomic, strong) NSArray *outsideColors;    // 外層漸變的顏色數組 (有默認顏色)

還提供了相關API方法控制水波紋

// 開始波浪
- (void)startWave;
// 停止波動
- (void)stopWave;
// 繼續波動
- (void)goOnWave;
// 清空波浪
- (void)resetWave;

大家可能是把自己的代碼上傳到github public庫中,沒有構建自己的Cocoapods庫,大家可以參考:

http://www.cnblogs.com/weiming4219/p/7699699.html
http://www.lxweimin.com/p/950026d788bd

特別鳴謝:http://www.lxweimin.com/p/fbf5a2ab00c1

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協議。它實...
    香橙柚子閱讀 24,057評論 8 183
  • 圖不太清晰,昨天才學做的圖,技巧沒太掌握。
    懂懂書童閱讀 166評論 0 0
  • GROW輔導的關鍵原則 Goal:目標設定的常用問題 你的目標是什么? 如果你知道答案的話,那是什么? 具體的目標...
    鐸悅教育集團閱讀 1,764評論 0 0
  • 等 當季節讓人充滿想象, 坐在寂寞的門檻上, 我端詳一棵樹,和安靜的天空, 等著春來,等著你來。 我在想象鳥群飛過...
    槐椿堂閱讀 231評論 0 0