zoukankan      html  css  js  c++  java
  • 果冻效果

    果冻效果

    说明

    参考源码 https://github.com/Resory/RYCuteView

    效果

    源码

    https://github.com/YouXianMing/Animations

    //
    //  SpringEffectController.m
    //  Animations
    //
    //  Created by YouXianMing on 16/1/17.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "SpringEffectController.h"
    #import "WxHxD.h"
    #import "UIView+SetRect.h"
    
    @interface SpringEffectController (){
        
        CGPoint  _centerPoint;
    }
    
    @property (nonatomic, strong) UIView         *pointView;
    @property (nonatomic, strong) CAShapeLayer   *shapeLayer;
    @property (nonatomic, strong) CADisplayLink  *displayLink;
    
    @end
    
    @implementation SpringEffectController
    
    - (void)setup {
        
        [super setup];
        
        _centerPoint = self.contentView.center;
        
        self.shapeLayer           = [CAShapeLayer layer];
        self.shapeLayer.frame     = self.contentView.bounds;
        self.shapeLayer.fillColor = [UIColor redColor].CGColor;
        self.shapeLayer.path      = [self calculatePathWithPoint:CGPointMake(Width / 2.f, Height / 2.f)].CGPath;
        [self.contentView.layer addSublayer:self.shapeLayer];
        
        self.pointView                   = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 4, 4)];
        self.pointView.center            = self.contentView.center;
        [self.contentView addSubview:self.pointView];
        
        self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkEvent)];
        [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        
        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureEvent:)];
        [self.contentView addGestureRecognizer:panGesture];
        
    }
    
    - (UIBezierPath *)calculatePathWithPoint:(CGPoint)point {
        
        UIBezierPath *path = [UIBezierPath bezierPath];
        
        [path moveToPoint:CGPointMake(0, Height / 2.f)];
        [path addLineToPoint:CGPointMake(0, Height)];
        [path addLineToPoint:CGPointMake(Width, Height)];
        [path addLineToPoint:CGPointMake(Width, Height / 2.f)];
        [path addQuadCurveToPoint:CGPointMake(0, Height / 2.f)
                     controlPoint:point];
        
        return path;
    }
    
    - (void)panGestureEvent:(UIPanGestureRecognizer *)panGesture {
        
        CGPoint point          = [panGesture locationInView:panGesture.view];
        CGPoint calculatePoint = CGPointMake((point.x + _centerPoint.x) / 2.f, (point.y + _centerPoint.y) / 2.f);
        
        if (panGesture.state == UIGestureRecognizerStateChanged) {
            
            self.shapeLayer.path  = [self calculatePathWithPoint:calculatePoint].CGPath;
            self.pointView.center = calculatePoint;
            
        } else if (panGesture.state == UIGestureRecognizerStateCancelled ||
                   panGesture.state == UIGestureRecognizerStateEnded ||
                   panGesture.state == UIGestureRecognizerStateFailed) {
                    
            [UIView animateWithDuration:1.0 delay:0.0 usingSpringWithDamping:0.25f initialSpringVelocity:0
                                options:UIViewAnimationOptionCurveEaseInOut
                             animations:^{
                                 
                                 self.pointView.center = self.contentView.center;
                                 
                             } completion:nil];
        }
    }
    
    - (void)displayLinkEvent {
        
        CALayer *layer       = self.pointView.layer.presentationLayer;
        self.shapeLayer.path = [self calculatePathWithPoint:layer.position].CGPath;
    }
    
    @end
  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5137586.html
Copyright © 2011-2022 走看看