// AppDelegate .h 文件
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
// AppDelegate .m 文件
#import "AppDelegate.h"
#import "WavesView.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
WavesView *waves = [[WavesView alloc] init];
waves.frame = [[UIScreen mainScreen] bounds];
waves.backgroundColor = [UIColor whiteColor];
[self.window addSubview:waves];
[self.window makeKeyAndVisible];
return YES;
}
@end
// WavesView .h 文件
#import <UIKit/UIKit.h>
@interface WavesView : UIView
{
float a;
float b;
BOOL flag;
}
@end
// WavesView .m 文件
#import "WavesView.h"
@implementation WavesView
- (id)init
{
if (self = [super init]) {
a = 5;
b = 0;
flag = NO;
[NSTimer scheduledTimerWithTimeInterval:0.025 target:self selector:@selector(animateWave) userInfo:nil repeats:YES];
}
return self;
}
- (void)animateWave
{
if (flag) {
a += 0.1;
}else{
a -= 0.1;
}
if (a <= 4) {
flag = YES;
}
if (a >= 5) {
flag = NO;
}
b += 0.1;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
{
UIBezierPath *path = [[UIBezierPath alloc] init];
//线条的起始点
[path moveToPoint:CGPointMake(0, 160)];
float y = 160;
for (float x = 0; x <= 320; x++) {
/*画正弦函数曲线从(0,160)到(320,160),
其中a的值来回变化导致曲线峰值来回变化,
b值不断增加导致曲线不断横行位移,
a,b两个值结合一起变化,从而形成波浪的效果
*/
y = a*sin(x/180.0*M_PI + b * 4 / M_PI)*5 + 160;
[path addLineToPoint:CGPointMake(x, y)];
}
/*下面几条线为了形成闭合的图形*/
[path addLineToPoint:CGPointMake(320, self.frame.size.height)];
[path addLineToPoint:CGPointMake(0, self.frame.size.height)];
[path addLineToPoint:CGPointMake(0, 160)];
// 颜色
UIColor *color = [UIColor colorWithRed:86/255.0 green:202/255.0 blue:139/255.0 alpha:1];
// 填充颜色
[color set];
[path fill];
path.lineWidth = 1.0f;
[path stroke];
}
@end
// 效果图