欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS如何简单实现绘制爱心?

程序员文章站 2022-06-27 21:20:41
灵感来源于前端CSS画红心的原理 "参考" 上代码 简单调用如下: ......

灵感来源于前端css画红心的原理

iOS如何简单实现绘制爱心?

上代码

#import <uikit/uikit.h>
/**
    灵感来自于前端css画红心的原理: 一个正方形 + 两个圆 + 整体旋转一定的角度
*/

ns_assume_nonnull_begin
ib_designable
@interface wgbheartview : uiview
//❤心有多大?
@property (nonatomic,assign) ibinspectable cgfloat heartsize;
//❤心的颜色?
@property (nonatomic,strong) ibinspectable uicolor *heartcolor;
@end
ns_assume_nonnull_end


#import "wgbheartview.h"

@interface wgbheartview()

@property (nonatomic,strong) uiview *bottomview;
@property (nonatomic,strong) uiview *leftview;
@property (nonatomic,strong) uiview *rightview;

@end

@implementation wgbheartview

- (instancetype)initwithframe:(cgrect)frame
{
    self = [super initwithframe:frame];
    if (self) {
        [self initconfig];
    }
    return self;
}

- (instancetype)initwithcoder:(nscoder *)coder
{
    self = [super initwithcoder:coder];
    if (self) {
        [self initconfig];
    }
    return self;
}

- (void)initconfig{
        //默认值
    self.heartsize = 150.0;
    self.heartcolor = [uicolor redcolor];
    [self addsubview: self.bottomview];
    [self addsubview: self.leftview];
    [self addsubview: self.rightview];
    //提前旋转45度
    self.transform = cgaffinetransformmakerotation(m_pi_4);
}

//去除设置背景色 
- (void)setbackgroundcolor:(uicolor *)backgroundcolor{
    backgroundcolor = [uicolor clearcolor];
    [super setbackgroundcolor:backgroundcolor];
}

- (void)setheartsize:(cgfloat)heartsize{
    _heartsize = heartsize;
    cgfloat partsize = heartsize/3.0;
    self.bottomview.frame = cgrectmake(partsize, partsize, partsize*2 , partsize*2);
    self.leftview.frame = cgrectmake(0, partsize, partsize*2 , partsize*2);
    self.rightview.frame = cgrectmake(partsize, 0, partsize*2 , partsize*2);
    
    self.leftview.layer.cornerradius = partsize;
    self.rightview.layer.cornerradius = partsize;
}

- (void)setheartcolor:(uicolor *)heartcolor{
    _heartcolor = heartcolor;
    self.bottomview.backgroundcolor = heartcolor;
    self.leftview.backgroundcolor = heartcolor;
    self.rightview.backgroundcolor = heartcolor;
}

    ///mark:- lazy load
- (uiview *)bottomview{
    if (!_bottomview) {
        _bottomview = [[uiview alloc] initwithframe:cgrectzero];
        [self addsubview:_bottomview];
    }
    return _bottomview;
}
- (uiview *)leftview{
    if (!_leftview) {
        _leftview = [[uiview alloc] initwithframe:cgrectzero];
        [self addsubview:_leftview];
    }
    return _leftview;
}

- (uiview *)rightview{
    if (!_rightview) {
        _rightview = [[uiview alloc] initwithframe:cgrectzero];
        [self addsubview:_rightview];
    }
    return _rightview;
}

@end

iOS如何简单实现绘制爱心?

简单调用如下:

    wgbheartview *heartview = [[wgbheartview alloc] initwithframe:cgrectmake(100, 100, 100 , 100)];
    heartview.heartcolor = [uicolor blackcolor];//默认颜色是红色
    heartview.heartsize = 100; //这个尺寸最好是设置与视图宽高一致 生成的爱心❤️比较规则
    [self.view addsubview: heartview];
    
    for (nsinteger i = 0; i < 6; i += 1) {
        cgfloat heartwh = 50.0f;
        cgfloat margin = 15.0f;
        wgbheartview *heartitemview = [[wgbheartview alloc] initwithframe:cgrectmake(20 + (heartwh+margin)*i,   250, heartwh , heartwh)];
        heartitemview.heartcolor = [uicolor colorwithred:arc4random()%256/255.0f green:arc4random()%256/255.0f  blue:arc4random()%256/255.0f alpha:1.0f];
        heartitemview.heartsize = heartwh;
        [self.view addsubview: heartitemview];
    }