点击的效果是这样的
实现代码:
链接: https://pan.baidu.com/s/1kUZKajH 密码: b6ae
gif图片像素比较渣—-实际效果要好的多
图片变换的思路—-
没有点击的图片是白色底色==黑色边缘—- 中间有一个汉字
点击的图片是 绿色底色—没有边缘—-中间汉字变成白色
动画效果是一个缩放的过程—–就是先变小再变大—–
如果选中—-就在绿色和白色之间切换结构:
底下是一个view +上面一个button
button用来做点击事件的响应者—并且给他添加上文字“一”
底下的view做 drawrect的绘图
关键代码—-
//
// CircleView.m
// testAnimationLayer
//
// Created by mac on 16/10/25.
// Copyright © 2016年 yyb. All rights reserved.
//
#import "CircleView.h"
#define animateWithDuration_times 0.2
#define PI 3.14159265358979323846
@implementation CircleView
- (void)drawRect:(CGRect)rect
{
//当选中状态就会走添加绿色的方法----
if(_isSelected)
{
[[UIColor colorWithRed:29/255.0 green:154/255.0 blue:72/255.0 alpha:1] setFill];
UIBezierPath *path = [UIBezierPath bezierPath];
[path addArcWithCenter:CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2) radius:self.frame.size.height / 4 startAngle:0.0 endAngle:180.0 clockwise:YES];
[path fill];
}else{
CGRect parentViewBounds = self.bounds;
CGFloat x = CGRectGetWidth(parentViewBounds)/2;
CGFloat y = CGRectGetHeight(parentViewBounds)/2;
//一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画
CGContextRef context = UIGraphicsGetCurrentContext();
//画大圆并填充颜
UIColor*aColor = [UIColor whiteColor];
CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色
CGContextSetRGBStrokeColor(context,167.0f/255.0f,167.0f/255.0f,167.0f/255.0f,1.0f);//画笔线的颜色
CGContextSetLineWidth(context, 3.0);//线的宽度
/**
*
*
* @param c 上下文
* @param x 圆点坐标
* @param y 圆点坐标
* @param radius 半径
* @param startAngle 开始的弧度 1弧度=180°/π (≈57.3°) 度=弧度×180°/π 360°=360×π/180 =2π 弧度
* @param endAngle 结束的弧度
* @param clockwise 0 顺时针 1 逆时针
*/
CGContextAddArc(context,x,y, self.frame.size.height / 4, 0, 2*PI, 0); //添加一个圆
CGContextDrawPath(context, kCGPathFillStroke); //绘制路径加填充
}
[super drawRect:rect];
}
- (void)setIsSelected:(BOOL)isSelected {
//第一次显示的时候放大它
[UIView animateWithDuration:animateWithDuration_times animations:^{
CGAffineTransform newTransform = CGAffineTransformScale(self.transform, 0.1, 0.1);
[self setTransform:newTransform];
self.alpha = 0.1;
} completion:^(BOOL finished) {
_isSelected = isSelected;
[self setNeedsDisplay];
//第一次显示的时候放大它
[UIView animateWithDuration:animateWithDuration_times animations:^{
CGAffineTransform newTransform = CGAffineTransformConcat(self.transform, CGAffineTransformInvert(self.transform));
[self setTransform:newTransform];
self.alpha = 1.0;
} completion:^(BOOL finished) {
}];
}];
}
@end
点击的瞬间—开始做动画—当放大完成的瞬间—变成另外一种样式—重绘DrawRect
注意点:
尝试添加子layer的动画—-会覆盖掉button的文字—–原因我也不知道