美文网首页iOS-Objective-C
iOS水波扩散效果实现

iOS水波扩散效果实现

作者: 追沐 | 来源:发表于2017-07-29 14:16 被阅读79次

实现效果

水波纹从中心从外侧扩散的效果实现:


wave.png

实现思路

1、通过一个定时器等,重复的创建一个圆;
2、将创建的圆,进行倍数放大,实现扩散效果;
3、将放大的圆的透明度从1~0做一个变化,实现往外淡出的效果;
4、放大后的圆视图从父视图上移除。
这样,创建、扩大、移除中实现水波纹扩散的效果。当然对于圆圈视图需要再其内部通过- (void)drawRect:(CGRect)rect方法画圆。

代码如下

写一个圆圈视图DDWaterVaveView

#import "DDWaterVaveView.h"

@interface DDWaterVaveView ()

@property (nonatomic) NSTimer     *timer;

@end

@implementation DDWaterVaveView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        
        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    
    //最初半径
    CGFloat radius = self.frame.size.width * 0.5;
    //开始角
    CGFloat startAngle = 0;
    //结束角
    CGFloat endAngle = 2 * M_PI;
    //中心点
    NSLog(@"------ %f",self.frame.size.width);//这里放大多少就取放大值的2倍的分之一
    CGPoint center = CGPointMake(self.frame.size.width*0.25, self.frame.size.height*0.25);
    //画圆
    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
    //生成layer对象
    CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
    shapeLayer.path = bezierPath.CGPath;//设置path
    shapeLayer.strokeColor = [UIColor lightGrayColor].CGColor;//圆边框颜色
    shapeLayer.fillColor = [UIColor lightGrayColor].CGColor;//圆填充颜色
    //添加layer对象
    [self.layer addSublayer:shapeLayer];
}

调用实现效果

#import "ViewController.h"
#import "DDWaterVaveView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(clickAnimation:) userInfo:nil repeats:YES];
}

- (void)clickAnimation:(id)sender {
    __block DDWaterVaveView *waterView = [[DDWaterVaveView alloc]initWithFrame:CGRectMake(100, 100, 50, 50)];
    [self.view addSubview:waterView];
    
    [UIView animateWithDuration:2 animations:^{
        waterView.transform = CGAffineTransformScale(waterView.transform, 2, 2);
        waterView.alpha = 0;
        
    } completion:^(BOOL finished) {
        [waterView removeFromSuperview];
    }];
}

@end

说明

查了查资料自己整理的,只是做了代码的搬运工而已。我看了网上还有其他实现思路,也是可以借鉴的。此外本篇的实现封装的并不是很彻底。
大家有不同的思路或者想法可以互相交流。

https://github.com/Mexiang/WaterWave

相关文章

  • iOS水波扩散效果实现

    实现效果 水波纹从中心从外侧扩散的效果实现: 实现思路 1、通过一个定时器等,重复的创建一个圆;2、将创建的圆,进...

  • 水波纹扩散效果

    传送门:OC、swift 因为代码并不多,在这里就简单说一下思路吧:1.我创建了一个自定义的view,在里面用贝塞...

  • Android 两种方式实现类似水波扩散效果

    两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 注‘Android技术交流群8788730...

  • Android 两种方式实现类似水波扩散效果

    两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 思路分析:通过canv...

  • 一次水波进度条的编程实现iOS

    一次水波进度条的编程实现iOS 一、水波浪的效果,随着进度接近100%,水将慢慢的灌满整个容器。效果图如下: 获取...

  • android 为布局增加水波纹效果5.0以上

    只适用于5.0以上 效果1,在边界内水波纹 效果2,就是一个圆形的水波纹,会超过布局扩散 android:clic...

  • button特效 水波效果(无js)

    原文链接:使用CSS实现按钮点击波纹效果 这种的相对来说比较简单,而且在点击时没有根据鼠标移入位置开始出现水波扩散...

  • iOS 圆形水波浪效果实现

    水波浪效果如下 最近项目中用到一个小的波浪动画,查阅了一些资料如下:网上参考的一些效果CDNS上的原理 主要实现方...

  • iOS CATransition动画 实现水波等效果

    CATransition类继承于CAAnimation类,提供多种过渡的效果,使用很简单 先看几个效果 开始使用 ...

  • 2019-11-05

    水波纹,interpolator加速器属性值 ------- 水波纹效果实现: 点击水波纹效果:只有android...

网友评论

    本文标题:iOS水波扩散效果实现

    本文链接:https://www.haomeiwen.com/subject/vlvqlxtx.html