iOS如何簡單實現繪製愛心?

来源:https://www.cnblogs.com/wgb1234/archive/2020/03/22/12544295.html
-Advertisement-
Play Games

靈感來源於前端CSS畫紅心的原理 "參考" 上代碼 簡單調用如下: ...


靈感來源於前端CSS畫紅心的原理 參考

示例

上代碼


#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

IB

簡單調用如下:

    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];
    }


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • RDD介紹 1.RDD概念以及特性 RDD(Resilient Distributed Dataset)叫做彈性分散式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、裡面的元素可並行計算的集合。RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性。RDD允許用戶在執行多個 ...
  • 使用SpringBoot初始化項目,集成測試遠程連接的Redis服務,並記錄了五大基本數據類型,在jedis中的體現方式。 ...
  • 對於資料庫,優化查詢的方法 1.使用索引 使用索引時,應儘量避免全表掃描,首先應考慮在 where 及 order by ,group by 涉及的列上建立索引。 2.優化SQL語句 1)分析查詢語句:通過對查詢語句的分析,可以瞭解查詢語句執行情況,找出查詢語句執行的瓶頸,從而優化查詢語句。 通過e ...
  • 帶著問題去思考,大家好! 前幾天瞭解到EF Core的開發模式:DB First(資料庫優先),Model First(模式優先),Code First(代碼優先)。 我所接觸的大多是DB First。如果大家瞭解的話,有些開源後臺項目,基本都會有後兩者,因為方便大家更快的去使用部署起來後臺。 在建 ...
  • 本文基於mysql 8.0,官方手冊: ,同時參考了 "mysql鎖機制詳解" 主要內容如下: 1. 共用鎖和排他鎖(Shared and Exclusive Locks) 2. 意向鎖(Intention Locks) 3. 記錄鎖(Record Locks) 4. 間隙鎖(Gap Locks) ...
  • 關於刪庫跑路的事故現在已經屢見不鮮了,數據備份的必要性是企業數據管理極其重要的一項工作。關於數據備份、恢復也有很多場景及方法,本系列也會將主要的幾種工具通過案例進行演示。 本系列將從邏輯備份及恢復開始講起,邏輯備份的工具主要有mysqldump/mydumper等其中mydumper可以指定多線程工 ...
  • 很多的小伙伴,經常會有這樣的困惑,我看了很多技術的學習文檔、書籍、甚至視頻,我想動手實踐,於是我打開了GitHub,想找個開源項目,進行學習,獲取項目實戰經驗。這個時候很多小伙伴就會面臨這樣的問題:“我不會搜啊,我該怎麼找呀?”,最終只能放棄。相信看完這篇文章,你就可以學會如何精準地在GitHub搜 ...
  • 慕課網-2019年android工程師 攻城獅 鏈接:https://pan.baidu.com/s/1HgKR7dPbZrJbm4LUEMG6rQ 提取碼:ge2a 複製這段內容後打開百度網盤手機App,操作更方便哦 微雲: 鏈接:https://share.weiyun.com/5PsCNB9 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...