• 用贝塞尔曲线实现水波效果


           // 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

              // 效果图

               

  • 相关阅读:
    Android 应用开发耗电量控制。。
    android优化从网络中加载图片速度。。
    SpringMVC 配置多视图解析器(velocity,jsp)
    linux mysql定时备份并压缩
    linux mysql定时备份并压缩
    mysql选择上一条、下一条数据记录,排序上移、下移、置顶
    MIT-CBCL Car Database 车辆训练数据集
    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    js实现ArrayList功能
    JXL.jar简单封装Excel读写操作
  • 原文地址:https://www.cnblogs.com/lantu1989/p/4602686.html
Copyright © 2020-2023  润新知