美文网首页
iOS开发--微信首页下拉拍摄的眼睛效果

iOS开发--微信首页下拉拍摄的眼睛效果

作者: iOS开发那些事 | 来源:发表于2016-09-12 23:35 被阅读89次
    Paste_Image.png

    直接上代码:

    #import <UIKit/UIKit.h>
    @interface ViewController : UIViewController
    @property (nonatomic, strong) UITableView *tableView;
    @property (strong, nonatomic) CAShapeLayer *eyeFirstLightLayer;
    @property (strong, nonatomic) CAShapeLayer *eyeSecondLightLayer;
    @property (strong, nonatomic) CAShapeLayer *eyeballLayer;
    @property (strong, nonatomic) CAShapeLayer *topEyesocketLayer;
    @property (strong, nonatomic) CAShapeLayer *bottomEyesocketLayer;
    @end
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 64, width, height)];
        bg.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.5];
        [self.view addSubview:bg];
        [bg addSubview:self.headView];
    
        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, width, height+64)];
        self.tableView.delegate = self;
        self.tableView.dataSource = self;
        [self.view addSubview:self.tableView];
        self.tableView.backgroundColor = [UIColor clearColor];
    
    
        [self.headView.layer addSublayer:self.eyeFirstLightLayer];
        [self.headView.layer addSublayer:self.eyeSecondLightLayer];
        [self.headView.layer addSublayer:self.eyeballLayer];
        [self.headView.layer addSublayer:self.topEyesocketLayer];
        [self.headView.layer addSublayer:self.bottomEyesocketLayer];
    
        [self setupAnimation];
    }
    
    - (UIView *)headView
    {
        if (!_headView) {
            CGFloat headViewH = 40.0;
            CGFloat headViewW = 60.0;
            _headView = [[UIView alloc] initWithFrame:CGRectMake((width-headViewW)/2.0, 10, headViewW, headViewH)];
    //        _headView.backgroundColor = [UIColor blackColor];
        }
        return _headView;
    }
    
    - (CAShapeLayer *)eyeFirstLightLayer {
        if (!_eyeFirstLightLayer) {
            _eyeFirstLightLayer = [CAShapeLayer layer];
            CGPoint center = CGPointMake(CGRectGetWidth(self.headView.frame) / 2, CGRectGetHeight(self.headView.frame) / 2);
            UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center
                                                                radius:CGRectGetWidth(self.headView.frame) * 0.2
                                                            startAngle:(230.f / 180.f) * M_PI
                                                              endAngle:(265.f / 180.f) * M_PI
                                                             clockwise:YES];
            _eyeFirstLightLayer.borderColor = [UIColor blackColor].CGColor;
            _eyeFirstLightLayer.lineWidth = 5.f;
            _eyeFirstLightLayer.path = path.CGPath;
            _eyeFirstLightLayer.fillColor = [UIColor clearColor].CGColor;
            _eyeFirstLightLayer.strokeColor = [UIColor whiteColor].CGColor;
        }
        return _eyeFirstLightLayer;
    }
    - (CAShapeLayer *)eyeSecondLightLayer {
        if (!_eyeSecondLightLayer) {
            _eyeSecondLightLayer = [CAShapeLayer layer];
            CGPoint center = CGPointMake(CGRectGetWidth(self.headView.frame) / 2, CGRectGetHeight(self.headView.frame) / 2);
            UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center
                                                                radius:CGRectGetWidth(self.headView.frame) * 0.2
                                                            startAngle:(211.f / 180.f) * M_PI
                                                              endAngle:(220.f / 180.f) * M_PI
                                                             clockwise:YES];
            _eyeSecondLightLayer.borderColor = [UIColor blackColor].CGColor;
            _eyeSecondLightLayer.lineWidth = 5.f;
            _eyeSecondLightLayer.path = path.CGPath;
            _eyeSecondLightLayer.fillColor = [UIColor clearColor].CGColor;
            _eyeSecondLightLayer.strokeColor = [UIColor whiteColor].CGColor;
        }
        return _eyeSecondLightLayer;
    }
    - (CAShapeLayer *)eyeballLayer {
        if (!_eyeballLayer) {
            _eyeballLayer = [CAShapeLayer layer];
            CGPoint center = CGPointMake(CGRectGetWidth(self.headView.frame) / 2, CGRectGetHeight(self.headView.frame) / 2);
            UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center
                                                                radius:CGRectGetWidth(self.headView.frame) * 0.3
                                                            startAngle:(0.f / 180.f) * M_PI
                                                              endAngle:(360.f / 180.f) * M_PI
                                                             clockwise:YES];
            _eyeballLayer.borderColor = [UIColor blackColor].CGColor;
            _eyeballLayer.lineWidth = 1.f;
            _eyeballLayer.path = path.CGPath;
            _eyeballLayer.fillColor = [UIColor clearColor].CGColor;
            _eyeballLayer.strokeColor = [UIColor whiteColor].CGColor;
            _eyeballLayer.anchorPoint = CGPointMake(0.5, 0.5);
        }
        return _eyeballLayer;
    }
    - (CAShapeLayer *)topEyesocketLayer {
        if (!_topEyesocketLayer) {
            _topEyesocketLayer = [CAShapeLayer layer];
            CGPoint center = CGPointMake(CGRectGetWidth(self.headView.frame) / 2, CGRectGetHeight(self.headView.frame) / 2);
            UIBezierPath *path = [UIBezierPath bezierPath];
            [path moveToPoint:CGPointMake(0, CGRectGetHeight(self.headView.frame) / 2)];
            [path addQuadCurveToPoint:CGPointMake(CGRectGetWidth(self.headView.frame), CGRectGetHeight(self.headView.frame) / 2)
                         controlPoint:CGPointMake(CGRectGetWidth(self.headView.frame) / 2, center.y - center.y - 20)];
            _topEyesocketLayer.borderColor = [UIColor blackColor].CGColor;
            _topEyesocketLayer.lineWidth = 1.f;
            _topEyesocketLayer.path = path.CGPath;
            _topEyesocketLayer.fillColor = [UIColor clearColor].CGColor;
            _topEyesocketLayer.strokeColor = [UIColor whiteColor].CGColor;
        }
        return _topEyesocketLayer;
    }
    
    - (CAShapeLayer *)bottomEyesocketLayer {
        if (!_bottomEyesocketLayer) {
            _bottomEyesocketLayer = [CAShapeLayer layer];
            CGPoint center = CGPointMake(CGRectGetWidth(self.headView.frame) / 2, CGRectGetHeight(self.headView.frame) / 2);
            UIBezierPath *path = [UIBezierPath bezierPath];
            [path moveToPoint:CGPointMake(0, CGRectGetHeight(self.headView.frame) / 2)];
            [path addQuadCurveToPoint:CGPointMake(CGRectGetWidth(self.headView.frame), CGRectGetHeight(self.headView.frame) / 2)
                         controlPoint:CGPointMake(CGRectGetWidth(self.headView.frame) / 2, center.y + center.y + 20)];
            _bottomEyesocketLayer.borderColor = [UIColor blackColor].CGColor;
            _bottomEyesocketLayer.lineWidth = 1.f;
            _bottomEyesocketLayer.path = path.CGPath;
            _bottomEyesocketLayer.fillColor = [UIColor clearColor].CGColor;
            _bottomEyesocketLayer.strokeColor = [UIColor whiteColor].CGColor;
        }
        return _bottomEyesocketLayer;
    }
    
    - (void)setupAnimation {
        self.eyeFirstLightLayer.lineWidth = 0.f;
        self.eyeSecondLightLayer.lineWidth = 0.f;
        self.eyeballLayer.opacity = 0.f;
        _bottomEyesocketLayer.strokeStart = 0.5f;
        _bottomEyesocketLayer.strokeEnd = 0.5f;
        _topEyesocketLayer.strokeStart = 0.5f;
        _topEyesocketLayer.strokeEnd = 0.5f;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        [self animationWith:scrollView.contentOffset.y];
    }
    
    - (void)animationWith:(CGFloat)y {
        CGFloat flag = self.view.frame.origin.y * 2.f - 20.f;
        if (y < flag) {
            if (self.eyeFirstLightLayer.lineWidth < 5.f) {
                self.eyeFirstLightLayer.lineWidth += 1.f;
                self.eyeSecondLightLayer.lineWidth += 1.f;
            }
        }
        if(y < flag - 20) {
            if (self.eyeballLayer.opacity <= 1.0f) {
                self.eyeballLayer.opacity += 0.1f;
            }
        }
        if (y < flag - 40) {
            if (self.topEyesocketLayer.strokeEnd < 1.f && self.topEyesocketLayer.strokeStart > 0.f) {
                self.topEyesocketLayer.strokeEnd += 0.1f;
                self.topEyesocketLayer.strokeStart -= 0.1f;
                self.bottomEyesocketLayer.strokeEnd += 0.1f;
                self.bottomEyesocketLayer.strokeStart -= 0.1f;
            }
        }
        if (y > flag - 40) {
            if (self.topEyesocketLayer.strokeEnd > 0.5f && self.topEyesocketLayer.strokeStart < 0.5f) {
                self.topEyesocketLayer.strokeEnd -= 0.1f;
                self.topEyesocketLayer.strokeStart += 0.1f;
                self.bottomEyesocketLayer.strokeEnd -= 0.1f;
                self.bottomEyesocketLayer.strokeStart += 0.1f;
            }
        }
        if (y > flag - 20) {
            if (self.eyeballLayer.opacity >= 0.0f) {
                self.eyeballLayer.opacity -= 0.1f;
            }
        }
        if (y > flag) {
            if (self.eyeFirstLightLayer.lineWidth > 0.f) {
                self.eyeFirstLightLayer.lineWidth -= 1.f;
                self.eyeSecondLightLayer.lineWidth -= 1.f;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题: iOS开发--微信首页下拉拍摄的眼睛效果

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