iOS按钮点击水波纹效果

iOS按钮点击水波纹效果_第1张图片
水纹按钮动画效果
1.首先自定义一个按钮 ZFButton 创建方法
-(void)startAnimation:(UIButton *)btn event:(UIEvent *)event{
  self.userInteractionEnabled = NO;
  //    UIView *button = (UIView *)btn.superview;
  //获取event 事件在 btn 的事件集
    NSSet *set = [event touchesForView:btn];
  //获取点击所有点击事件对象
  NSArray *touchArr = set.allObjects;
  //获取第一个点击事件对象
  UITouch *touch = touchArr[0];
  //获取点击在btn 上的point
  CGPoint point = [touch locationInView:btn];
  self.circleCenterX = point.x;
  self.circleCenterY = point.y;

//开启定时器
  timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];

//开启runloop 定时器更加准确
  [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
定时器调用方法
-(void)timeAction{
   countNum += 1;
//可以加延时
   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    radius += 5;
    [self setNeedsDisplay];
});

//增加半径 没有算最大半径就给听50
if (radius > 50) {
    countNum = 0;
    radius = 0;
    [timer invalidate]; //定时器停止
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    radius = 0;
    [self setNeedsDisplay];
  });

    //按钮可以点击
    self.userInteractionEnabled = YES;
  }
}
最后绘制水纹
-(void)drawRect:(CGRect)rect{
  CGContextRef ctx = UIGraphicsGetCurrentContext();

  //画圆
  CGContextAddArc(ctx, self.circleCenterX, self.circleCenterY,         radius, 0,M_PI * 2, 0);
  [animationColor setStroke];
  [animationColor setFill];
  CGContextFillPath(ctx);
}

最后献上demo 下载地址

你可能感兴趣的:(iOS按钮点击水波纹效果)