代表着不同的效果,一个方法实现我们的下拉放

2019-09-17 作者:编程   |   浏览(71)

最近加班加的比较多,再加上这个真的比较考验逻辑,所以一段时间都没写东西了。来说说这次的功能,网上有很多类似的demo,但都是分开实现的,我把这两个功能放到了一起,并且没有使用AutoLayout,没有用KVO,没有用storyboard/xib.除了逻辑有点绕(现在不是流行玩算法么,那就搞的难理解点吧。。。),其他的还是简单易懂的,而且我将重点数字使用的宏定义,扩展性很强。

小鱼儿玄机30码 1shape.gif小鱼儿玄机30码 2demo.png

这个类永远只能创建一个对象

前段时候在简书看博客时,看到Monkey_小鱼儿玄机30码,ALin 分享的高仿花田小憩,项目整体不是太复杂,并且展示效果确实挺不错的,就萌发了工作之余用OC仿写的念头。ps:主要是偷懒,不用再找UI,不用再找接口了,在这要非常感谢Monkey_ALin,节省了很多时间!

先来看看效果吧。

- viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. CALayer *layer = [CALayer layer]; layer.backgroundColor = [UIColor redColor].CGColor; //圆环底色 layer.frame = CGRectMake(100, 100, 110, 110); //创建一个圆环 UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake radius:50 startAngle:0 endAngle:M_PI*2 clockwise:YES]; //圆环遮罩 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.fillColor = [UIColor clearColor].CGColor; shapeLayer.strokeColor = [UIColor redColor].CGColor; shapeLayer.lineWidth = 5; shapeLayer.strokeStart = 0; shapeLayer.strokeEnd = 0.8; shapeLayer.lineCap = @"round"; shapeLayer.lineDashPhase = 0.8; shapeLayer.path = bezierPath.CGPath; //颜色渐变 NSMutableArray *colors = [NSMutableArray arrayWithObjects:[UIColor redColor].CGColor,[UIColor whiteColor].CGColor, nil]; CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.shadowPath = bezierPath.CGPath; gradientLayer.frame = CGRectMake(50, 50, 60, 60); gradientLayer.startPoint = CGPointMake; gradientLayer.endPoint = CGPointMake; [gradientLayer setColors:[NSArray arrayWithArray:colors]]; [layer addSublayer:gradientLayer]; //设置颜色渐变 [layer setMask:shapeLayer]; //设置圆环遮罩 [self.view.layer addSublayer:layer]; //动画 CABasicAnimation *scaleAnimation1 = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; scaleAnimation1.fromValue = [NSNumber numberWithFloat:1.0]; scaleAnimation1.toValue = [NSNumber numberWithFloat:1.5]; scaleAnimation1.autoreverses = YES;// scaleAnimation1.fillMode = kCAFillModeForwards; scaleAnimation1.duration = 0.8; CABasicAnimation *rotationAnimation2 = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation2.fromValue = [NSNumber numberWithFloat:0]; rotationAnimation2.toValue = [NSNumber numberWithFloat:6.0*M_PI]; rotationAnimation2.autoreverses = YES;// scaleAnimation.fillMode = kCAFillModeForwards; rotationAnimation2.repeatCount = MAXFLOAT; rotationAnimation2.beginTime = 0.8; //延时执行,注释掉动画会同时进行 rotationAnimation2.duration = 2; //组合动画 CAAnimationGroup *groupAnnimation = [CAAnimationGroup animation]; groupAnnimation.duration = 4; groupAnnimation.autoreverses = YES; groupAnnimation.animations = @[scaleAnimation1, rotationAnimation2]; groupAnnimation.repeatCount = MAXFLOAT; [layer addAnimation:groupAnnimation forKey:@"groupAnnimation"]; }- didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end

需要使用一个类方法来创建对象 让这个类不能再创建不同对象了

github下载地址:swift版 与 OC版

小鱼儿玄机30码 3

关键的地方在于CABasicAnimation对象的初始化方式中keyPath的设定。在iOS中有以下几种不同的keyPath,代表着不同的效果:

步骤:

  1. 创建一个类 YQConfig
  2. 写一个类方法
 ``` (instancetype)config{static YQConfig*instance;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{ instance=[[YQConfig alloc]init];});return instance;

}

```
-touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ YQConfig*config1=[[YQConfig alloc]init ]; NSLog(@"config1 %@ ",config1); YQConfig*config2=[[YQConfig alloc]init]; NSLog(@"config2 %@ ",config2); YQConfig *config3=[YQConfig config]; NSLog(@"config3 %@",config3 ); YQConfig*config4=[YQConfig config ]; NSLog(@"config4 %@ ",config4 ); }

运行结果为:2016-07-19 11:34:20.996 单例模式[5486:2851930] config1 <YQConfig: 0x7fcedae7dc90> 2016-07-19 11:34:20.997 单例模式[5486:2851930] config2 <YQConfig: 0x7fcedad12410> 2016-07-19 11:34:20.997 单例模式[5486:2851930] config3 <YQConfig: 0x7fcedac11ba0>2016-07-19 11:34:20.997 单例模式[5486:2851930] config4 <YQConfig: 0x7fcedac11ba0> 可以看出:最后两个地址分配的是一样的 

展示效果

小鱼儿玄机30码 4专题部分1小鱼儿玄机30码 5专题部分2小鱼儿玄机30码 6商城部分1小鱼儿玄机30码 7商城部分2小鱼儿玄机30码 8我的部分项目整体的实现逻辑与思路与Swift版的差不多,大家可以参照文章。另外完善了一些Swift版的部分问题。

本文由小鱼儿玄机30码发布于编程,转载请注明出处:代表着不同的效果,一个方法实现我们的下拉放

关键词: 小鱼儿玄机30码