• 用UIBezierPath数组对UIView进行镂空处理


    用UIBezierPath数组对UIView进行镂空处理

    效果

    源码

    //
    //  CutOutClearView.h
    //  CutOutMaskView
    //
    //  Created by YouXianMing on 16/7/8.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface CutOutClearView : UIView
    
    @property (nonatomic, strong) UIColor  *fillColor;
    @property (nonatomic, strong) NSArray  <UIBezierPath *>  *paths;
    
    @end
    //
    //  CutOutClearView.m
    //  CutOutMaskView
    //
    //  Created by YouXianMing on 16/7/8.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "CutOutClearView.h"
    
    @implementation CutOutClearView
    
    - (instancetype)initWithFrame:(CGRect)frame {
        
        if (self = [super initWithFrame:frame]) {
        
            self.fillColor       = [UIColor whiteColor];
            self.backgroundColor = [UIColor clearColor];
            self.opaque          = NO;
        }
        
        return self;
    }
    
    - (void)drawRect:(CGRect)rect {
    
        [super drawRect:rect];
        
        [self.fillColor setFill];
        UIRectFill(rect);
        
        CGContextRef context = UIGraphicsGetCurrentContext();
        
        for (UIBezierPath *path in self.paths) {
            
            CGContextAddPath(context, path.CGPath);
            CGContextSetBlendMode(context, kCGBlendModeClear);
            CGContextFillPath(context);
        }
    }
    
    @end
    //
    //  ViewController.m
    //  CutOutClearView
    //
    //  Created by YouXianMing on 16/7/8.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "CutOutClearView.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
        imageView.image        = [UIImage imageNamed:@"bg.png"];
        imageView.contentMode  = UIViewContentModeScaleAspectFill;
        [self.view addSubview:imageView];
        
        NSMutableArray *paths = [NSMutableArray array];
        
        {
            UIBezierPath* bezierPath = [UIBezierPath bezierPath];
            [bezierPath moveToPoint: CGPointMake(57.04, 31.19)];
            [bezierPath addLineToPoint: CGPointMake(125.55, 12.5)];
            [bezierPath addLineToPoint: CGPointMake(185.5, 91)];
            [bezierPath addLineToPoint: CGPointMake(57.04, 169.5)];
            [bezierPath addLineToPoint: CGPointMake(18.5, 91)];
            [bezierPath addLineToPoint: CGPointMake(57.04, 31.19)];
            [bezierPath closePath];
            [paths addObject:bezierPath];
        }
        
        {
            UIBezierPath* bezierPath = [UIBezierPath bezierPath];
            [bezierPath moveToPoint: CGPointMake(46.5, 245.5)];
            [bezierPath addLineToPoint: CGPointMake(137.5, 272.5)];
            [bezierPath addLineToPoint: CGPointMake(137.5, 211.5)];
            [bezierPath addLineToPoint: CGPointMake(90.5, 196.5)];
            [bezierPath addLineToPoint: CGPointMake(46.5, 211.5)];
            [bezierPath addLineToPoint: CGPointMake(46.5, 245.5)];
            [bezierPath closePath];
            [paths addObject:bezierPath];
        }
        
        CutOutClearView *cutOutView = [[CutOutClearView alloc] initWithFrame:self.view.bounds];
        cutOutView.fillColor        = [UIColor redColor];
        cutOutView.paths            = paths;
    //    [self.view addSubview:cutOutView];
        imageView.maskView = cutOutView;
    }
    
    @end

    细节

  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5654830.html
Copyright © 2020-2023  润新知