能添加圖標的label

来源:http://www.cnblogs.com/YouXianMing/archive/2016/06/25/5615974.html
-Advertisement-
Play Games

能添加圖標的label 效果 源碼 https://github.com/YouXianMing/UI-Component-Collection 中的 IconEdgeInsetsLabel 細節 1. 繼承自UILabel 2. 重載了UILabel的兩個方法 ...


能添加圖標的label

 

效果

 

源碼

https://github.com/YouXianMing/UI-Component-Collection 中的 IconEdgeInsetsLabel

//
//  IconEdgeInsetsLabel.h
//  EdgeInsetLabel
//
//  Created by YouXianMing on 16/6/22.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef enum : NSUInteger {
    
    kIconAtLeft,
    kIconAtRight,
    
} EIconEdgeDirection;

@interface IconEdgeInsetsLabel : UILabel

@property (nonatomic, strong) UIView             *iconView;
@property (nonatomic)         UIEdgeInsets        edgeInsets;
@property (nonatomic)         EIconEdgeDirection  direction;
@property (nonatomic)         CGFloat             gap;

- (void)sizeToFitWithText:(NSString *)text;

@end
//
//  IconEdgeInsetsLabel.m
//  EdgeInsetLabel
//
//  Created by YouXianMing on 16/6/22.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "IconEdgeInsetsLabel.h"
#import "UIView+SetRect.h"

@interface IconEdgeInsetsLabel ()

@property (nonatomic, weak) UIView  *oldIconView;

@end

@implementation IconEdgeInsetsLabel

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
    
    UIEdgeInsets insets = self.edgeInsets;
    
    CGRect rect = [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets) limitedToNumberOfLines:numberOfLines];
    
    rect.origin.x    -= insets.left;
    rect.origin.y    -= insets.top;
    rect.size.height += (insets.top + insets.bottom);
    _iconView && [_iconView isKindOfClass:[UIView class]] ?
    (rect.size.width += (insets.left + insets.right + _gap + _iconView.frame.size.width)) :
    (rect.size.width += (insets.left + insets.right));

    return rect;
}

- (void)drawTextInRect:(CGRect)rect {
    
    UIEdgeInsets insets = self.edgeInsets;
    
    if (self.iconView) {
        
        if (self.direction == kIconAtLeft) {

            _iconView.left    = insets.left;
            _iconView.centerY = self.middleY;
            insets = UIEdgeInsetsMake(insets.top, insets.left + _gap + _iconView.frame.size.width, insets.bottom, insets.right);
            
        } else if (self.direction == kIconAtRight) {
        
            _iconView.right   = self.width - insets.right;
            _iconView.centerY = self.middleY;
            insets = UIEdgeInsetsMake(insets.top, insets.left, insets.bottom, insets.right  + _gap + _iconView.frame.size.width);
        }
    }
    
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

- (void)sizeToFitWithText:(NSString *)text {

    self.text = text;
    [self sizeToFit];
}

#pragma mark - setter & getter.

@synthesize iconView = _iconView;

- (void)setIconView:(UIView *)iconView {

    _oldIconView && [_oldIconView isKindOfClass:[UIView class]] ? ([_oldIconView removeFromSuperview]) : 0;
    
    _iconView    = iconView;
    _oldIconView = iconView;
    iconView.x   = 0.f;
    iconView.y   = 0.f;
    
    [self addSubview:iconView];
}

- (UIView *)iconView {

    return _iconView;
}

@end

 

細節

1. 繼承自UILabel

2. 重載了UILabel的兩個方法

 


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

-Advertisement-
Play Games
更多相關文章
  • 一.什麼是Service Service是一個應用程式組件,它是安卓實現程式後臺運行的一個解決方案。 二.分類 服務有兩種類別started、bound.但是一個服務類所要繼承的類是一樣的,都是Service類。也就是說,一個服務,可以包含上面兩種運行方式的服務,只是與它重載的方法有關,如果重寫了o ...
  • 我以自己項目中的一個模塊為例,首先有兩個頁面,第一個頁面為顯示城市頁面,第二個頁面為選擇要使用block傳的值(城市名)。 第一個頁面中的顯示控制項: //自定義左部定位視圖 self.locView = [[LocationView alloc] initWithFrame:CGRectMake(0 ...
  • 滾動視圖:在根視圖中添加UIScrollViewDelegate協議,聲明一些對象屬性 在程式中導入圖片,在.m文件中的代碼實現: 推薦:http://www.cnblogs.com/roucheng/p/3528371.html ...
  • 1.手機助手 1.1 USB鏈接 可以讀取手機的PID和VID,確定唯一的設備,可以給手機安裝對應的驅動等 socket在固定埠通信 1.2 WIFI鏈接 pc在電腦在整個網段發送UDP數據包,手機連接wifi後可以監聽這個埠,收到數據包,試圖與pc機建立連接 1.3 藍牙 通過Bluetoot ...
  • 首先介紹一下BroadCastRecieve有幾種: 1.無序廣播(普通廣播):sendBroadcast()方式 2.有序廣播:sendOrderedBroadcast()方式 3.粘性廣播:sendStickyBroadcast()方式 生命周期比較簡單: 下麵是無序廣播與有序廣播的區別: 下麵 ...
  • 工具:顯示快捷鍵幫助:Ctrl+Shift+LQuick access:Ctrl+3自定義ShortKeys:Window > preference > 搜索框中輸入“keys” 或者 Ctrl+3 輸入“keys” 尤其是Quick access(Ctrl+3)這個工具非常實用,可以找到任何一個菜 ...
  • 1.實現方式 1.1使用HttpUrlConnection 1.2使用HttpClient 1.3使用Socket,比如:豌豆莢,聊天工具 2.通訊渠道 2.1 WLAN(wi-fi),100米左右的數據傳輸 2.2 手機APN接入點(基站) 2.2.1 wap的方式,中國特色,首先會連接電信運營商 ...
  • IOS的用戶體驗做的很好,其中一點很重要的地方就是動畫效果。 最近在學習Android的Animation,簡單實現了一個IOS相機濾鏡退出的動畫: 佈局文件:activity_animation_demo.xml 佈局未考慮各個解析度,只是為了實現動畫邏輯,(代碼測試是在720P解析度的手機上) ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...